Java:子串索引范围

码:

public class Test { public static void main(String[] args) { String str = "University"; System.out.println(str.substring(4,7)); } } 

输出: ers

我真的不明白子串方法是如何工作的。 索引是否从0开始? 如果我从0开始, e在索引4,但是char i在7,所以输出将是ersi

0:U

1:n

2:我

3:v

4:e

5:r

6:s

7:我

8:t

9:y

开始索引是包含的

结束索引是独占的

Javadoc链接

请参阅javadoc ,这是第一个arg的包含索引,并且是第二个的独占索引

两者都是基于0的,但是开始是包容性的,最后是排他性的。 这确保了结果string的长度是start - end 。 把它们想象成string中的位置而不是实际的字符。

 0 1 2 3 4 5 6 7 8 9 uni VER sity se tn ad r t 

引用文档 :

子string从指定的beginIndex开始,并扩展到索引endIndex - 1处的字符。 因此子string的长度是endIndex-beginIndex

像你,我没有发现它自然而然。 我通常还得提醒自己

  • 返回的string的长度

    lastIndex – firstIndex

  • 你可以使用string的长度作为lastIndex,即使没有字符那里,试图引用它会抛出一个exception

所以

 "University".substring(6, 10) 

即使在位置10没有字符,也会返回4个字符的string“ sity"

是索引从零开始(0)。 两个参数是startIndex和endIndex,其中每个文档:

子string从指定的beginIndex开始,并扩展到索引endIndex – 1处的字符

在这里看到更多的信息。

对于子string(startIndex,endIndex),startIndex是包含的,endIndex是独占的。 startIndex和endIndex非常混乱。 我会理解substring(startIndex,length)来记住这个。

子string从第一个数字的位置开始,包括字符,但不包括给定的最后一个数字的字符

 public String substring(int beginIndex, int endIndex) 

beginIndex – 开始索引,包含。

endIndex – 结束索引,独占。

例:

 public class Test { public static void main(String args[]) { String Str = new String("Hello World"); System.out.println(Str.substring(3, 8)); } } 

输出:“lo wo”

从3到7指数

还有另一种substring()方法。

 public String substring(int beginIndex) 

beginIndex – 开始索引,包含。 返回从beginIndex开始到主String结尾的子string。

例:

 public class Test { public static void main(String args[]) { String Str = new String("Hello World"); System.out.println(Str.substring(3)); } } 

输出:“lo世界”

从3到最后一个索引

endIndex是非常混淆的术语。 我想动机是保持新的stringendIndex – startIndex的长度。 但是呢? 我想这很容易记住两者都是包容性的,而不是记住开始是包容性的,最终是排他性的。

 public class SubstringExample { public static void main(String[] args) { String str="OOPs is a Programing Paradiam.."; System.out.println(" length is ->" +str.length()); System.out.println(" Substring is ->" +str.substring(10, 29)); } } 

长度是 – > 31

子串是 – > 编程Paradiam