的假設我有一個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
爲什麼?
的假設我有一個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://stackoverflow.com/a/33600969/1393766 – Pshemo