public class Str {
public static void main(String[] args) {
String str = "abcde";
String s = str.substring(str.length());
System.out.println(s);
}
}
Индекс символа «e» равен 4, но я пытаюсь получить всю строку длиной 5. Если я выполняю приведенный выше код, почему он не выдает IndexOutOfBoundsException?
Массив начинается с 0 str.substring(str.length()-1)!
@huntsMan, str.substring(str.length()-1) даст полную строку, но str.length() вернет длину как 5, но нет 5-го индекса, он должен генерировать исключение, верно?
@YallalingKolkur имеет индексацию, такую как индексация массива, он всегда начинается с нуля, но длина отличается, он дает человеческие термины, потому что его будет легко читать.




В JavaDoc для Строка.подстрока() указано:
[throws] IndexOutOfBoundsException - if beginIndex is negative or larger than the length of this String object.
Поскольку ваш beginIndex равен длине строки, это допустимое значение, а substring() возвращает пустую строку.
В этом случае каково будет значение этого beginIndex
@YallalingKolkur Если вы вызываете подстроку только с 1 аргументом, этот аргумент является начальным индексом, а не конечным индексом.
@YallalingKolkur есть два метода substring(). Требуется два аргумента: beginIndex и endIndex. Другой принимает только один аргумент, beginIndex, а этот извлекает из beginIndex до конца строки.
Предположим, у вас есть строка:
Hello World
вот так выглядят индикаторы:
H e l l o W o r l d
0 1 2 3 4 5 6 7 8 9 10
«Hello World» имеет длину 11, поэтому в этом случае str.length будет равна 11.
теперь там нет индекса 11, на самом деле 11 находится за последним индексом. вот почему вы получаете IndexOutOfBounds
Кроме того, str.substring(number) возвращает подстроку, НАЧИНАЮЩУЮСЯ с указанного числа до конца строки.
поэтому str.substring(4) в этом случае вернет
o World
Просто подумал, что я должен положить это сюда
Пустая строка ("" с длиной 0) является допустимой строкой. Вот что возвращает ваш код.
Другими словами, str.substring(str.length()-1); возвращает строку «e», а str.substring(str.length()); возвращает пустую строку. Совершенно верно.
Индексация в java начинается с 0