在Java中,我使用的是substring()方法,但不确定为什么它不会引发“索引不足”错误。
substring()
字符串的abcde索引从0到4开头,但是substring()基于我可以调用foo.substring(0)并获取“ abcde”的事实,该方法将startIndex和endIndex作为参数。
abcde
那么为什么substring(5)起作用?该索引应超出范围。有什么解释?
/* 1234 abcde */ String foo = "abcde"; System.out.println(foo.substring(0)); System.out.println(foo.substring(1)); System.out.println(foo.substring(2)); System.out.println(foo.substring(3)); System.out.println(foo.substring(4)); System.out.println(foo.substring(5));
此代码输出:
abcde bcde cde de e //foo.substring(5) output nothing here, isn't this out of range?
当我用6替换5时:
foo.substring(6)
然后我得到错误:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
根据Java API文档,当起始索引大于字符串的 长度 时,子字符串将引发错误。
IndexOutOfBoundsException-如果beginIndex为负或大于此String对象的长度。
实际上,它们提供了一个与您非常相似的示例:
"emptiness".substring(9) returns "" (an empty string)
我想这意味着最好将Java String视为以下内容,其中包含一个索引|:
|
|0| A |1| B |2| C |3| D |4| E |5|
也就是说,字符串同时具有开始索引和结束索引。