Java String类中的Substring方法达到了它所不是的索引';我不应该
如果标题不清楚,我道歉 现在,在字符串中,索引从0开始。例如:Java String类中的Substring方法达到了它所不是的索引';我不应该,java,string,indexing,substring,Java,String,Indexing,Substring,如果标题不清楚,我道歉 现在,在字符串中,索引从0开始。例如: Index 0 1 2 3 4 String H E L L O 在本例中,最后一个索引是4 如果我想做这样的事情: System.out.println("hello".charAt(5)); 它会抛出一个“索引越界异常”,这是应该的 但是,如果我尝试运行以下代码: System.out.println("hello".substring(5)); 它跑了!我编写了类似的代码,后来注
Index 0 1 2 3 4
String H E L L O
在本例中,最后一个索引是4
如果我想做这样的事情:
System.out.println("hello".charAt(5));
它会抛出一个“索引越界异常”,这是应该的
但是,如果我尝试运行以下代码:
System.out.println("hello".substring(5));
它跑了!我编写了类似的代码,后来注意到了这一点,但无法理解
最后,问题是,我们怎么可能达到我们不应该达到的指标?它允许我们写:
stringObj.substring(stringObj.length());
而且它看起来不太安全,因为stringObj.length()返回的整数比最后一个索引多一个
它是故意制造的,并且有目的吗?如果是,目的是什么?它带来了什么好处
由于“索引越界异常”,它无法编译
它确实可以编译。当您尝试执行代码时,会出现运行时异常
System.out.println("hello".substring(5));
最后,问题是,我们怎么可能达到我们不应该达到的指标
阅读子字符串(…)
方法的API。它解释了该方法的工作原理以及参数的含义
在本例中,它返回一个空字符串。请参阅Java String API中的substring方法 () 字符串“.length()”方法将返回字符串中的字符数 如果从0->4开始计算“HELLO”,它仍将达到5个字符(长度),这是调用“HELLO”.length()时返回的数字
如果要访问字符串的最后一个字符,请使用(Stringobj.length()-1);通过使用.length()或.size()方法调用访问字符串或数组的最后一个元素在Java中是标准化的。在本例中,了解方法charAt和substring的实现细节很有帮助 中所述的特征可以描述为方法: 返回位于字符串指定索引处的字符。字符串索引从零开始 这就是为什么打电话:
System.out.println("hello".charAt(5));
给予
Exception in thread "main" java.lang.StringIndexOutOfBoundsException:
String index out of range: 5
因为正如您完美描述的,最大索引只有4。
substring
在java文档中进行了描述,并在“示例”部分解释了您的确切情况,其中说明:
“空”。子字符串(9)返回“”(空字符串)
作为补充参考,这里是实现的源代码,您可以看到它使用了java的
子字符串(int BeginInIndex,int endIndex)
方法。当您想到这样的索引时,使用子字符串
就更容易了(索引之间的类字母是)
返回“LL”
现在在子字符串(5)
的情况下,它的作用与子字符串(5,长度)
相同,这意味着在这种情况下它是子字符串(5,5)
。因此,由于5
索引作为可接受的值存在于我们的“模型”中,并且由于5
和5
之间没有字符,因此我们得到的是空字符串
如果子字符串(0,0)子字符串(1,1)
等等,只要我们的模型可以接受索引,就会出现类似的情况
StringIndexOutOfBoundsException
仅当我们尝试访问不可接受的索引时才会发生,这意味着:
- 消极的:
,-1
李>-2
- 大于
。这里:长度
6
7
它说beginIndex是包容性的
——当然是包容性的。如何获得索引为0的第一个字符?你能指定-1吗?那没有道理。将substring()方法与indexof()方法结合使用也很容易。您使用indexof()获取索引,使用substring()获取索引中的所有字符。我知道它应该是包含的,但我仍然不明白为什么在尝试str.substring(str.length())时它不抛出异常<代码>我仍然不明白为什么它不抛出异常API特别声明它将返回一个空字符串。API特别声明,如果索引大于长度,它将抛出异常。因此,这种行为有很好的记录。就我个人而言,我想不出为什么要使用substring返回空字符串。
H E L L O
0 1 2 3 4 5 <- acceptable range of indexes for "HELLO"
^ ^
| |
start end = length
(min index) (max index)
L L
2 3 4