Каким будет вывод String.substring(String.length)?

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?

Индексация в java начинается с 0

Andronicus 16.04.2019 09:05

Массив начинается с 0 str.substring(str.length()-1)!

HuntsMan 16.04.2019 09:05
Java != JavaScript
Jack Bashford 16.04.2019 09:06

@huntsMan, str.substring(str.length()-1) даст полную строку, но str.length() вернет длину как 5, но нет 5-го индекса, он должен генерировать исключение, верно?

Yallaling Kolkur 16.04.2019 09:11

@YallalingKolkur имеет индексацию, такую ​​​​как индексация массива, он всегда начинается с нуля, но длина отличается, он дает человеческие термины, потому что его будет легко читать.

HuntsMan 16.04.2019 09:19
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
5
245
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

В JavaDoc для Строка.подстрока() указано:

[throws] IndexOutOfBoundsException - if beginIndex is negative or larger than the length of this String object.

Поскольку ваш beginIndex равен длине строки, это допустимое значение, а substring() возвращает пустую строку.

В этом случае каково будет значение этого beginIndex

Yallaling Kolkur 16.04.2019 09:20

@YallalingKolkur Если вы вызываете подстроку только с 1 аргументом, этот аргумент является начальным индексом, а не конечным индексом.

vincrichaud 16.04.2019 09:44

@YallalingKolkur есть два метода substring(). Требуется два аргумента: beginIndex и endIndex. Другой принимает только один аргумент, beginIndex, а этот извлекает из beginIndex до конца строки.

Thomas Kläger 16.04.2019 11:09

Предположим, у вас есть строка:

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()); возвращает пустую строку. Совершенно верно.

Другие вопросы по теме