Java的String索引越界混淆
问题描述:
的假设我有一个Java的String索引越界混淆
String temp = "abcd";
System.out.println(temp.substring(0,4)); // out of bound, no error
System.out.println(temp.substring(0,5)); // out of bound, error
为什么?
答
的串开始在指定的beginIndex和延伸到字符索引endIndex - 1的
抛出:
IndexOutOfBoundsException - 如果将beginIndex是负数或endIndex大于此String对象的长度,或者beginIndex大于endIndex。
结束索引length
可以,但length + 1
不是。
答
因为子字符串在endIndex-1处结束。
答
根据docs:
public String substring(int beginIndex, int endIndex)
的串开始在指定的
beginIndex
并延伸到字符索引endIndex - 1
。
IndexOutOfBoundsException
- 如果beginIndex
为负,或者endIndex
比该字符串对象的长度大,或beginIndex
比endIndex
大。
由于System.out.println(temp.substring(0,5));
其中5>字符串的长度(abcd
),因此是例外。
答
子串(0,4)不考虑0到4.它认为0到3.第二个索引总是减1.在你的第二种情况下temp [4]超出范围。
的第二个参数是endIndex的,但最后指数是3 – KKKK
没必要重复,但是这可能会感兴趣:http://*.com/a/33600969/1393766 – Pshemo