如果标题不清楚,我深表歉意。
现在,在字符串中索引从 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));
它确实运行了!我写了类似的代码,后来注意到了这一点,但无法弄明白。
最终,问题是我们怎么可能达到我们不应该达到的指数?它允许我们写:
stringObj.substring(stringObj.length());
它看起来不太安全,因为 stringObj.length() 返回一个比最后一个索引多 1 的整数。
它是故意制作的吗?这是有目的的吗?如果是这样,这个目的是什么,它带来的好处是什么?
使用 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)
当您从 start
中提取子字符串时至 end
你只能得到这些索引之间的字符。
所以在 "HELLO".substring(2,4)
的情况下你会得到一部分
L L
2 3 4
返回 "LL"
.
现在如果是substring(5)
它的作用与 substring(5,length)
相同这意味着在这种情况下它是 substring(5,5)
.所以自 5
索引 存在 在我们的“模型”中作为可接受的值,并且由于 5
之间没有字符和 5
结果我们得到空字符串。
类似的情况发生在 substring(0,0)
的情况下substring(1,1)
等等,只要我们的模型可以接受索引。
StringIndexOutOfBoundsException
仅当我们尝试访问 Not Acceptable 索引时才会发生,这意味着:
- 负数:
-1
, -2
, ...
- 大于
length
.这里:6
7
, ...