Узнайте, как получить подстроку из заданной строки в Java между двумя индексами. Обратите внимание, что String — это тип на основе массива символов, а первый символ строки имеет индекс 0.
Если мы сохраним строку «Hello World» в Java, то в памяти будет создан массив символов размером 11 для хранения всех символов значения строки.
String str = "Hello World";
Ниже приведено графическое изображение массива в памяти.

1. API String.substring()
String.substring() в Java возвращает новую строку, которая является подстрокой заданной строки, которая начинается с startIndex до необязательного endIndex. Эти индексы определяют позицию подстроки в исходной строке.
Метод substring() принимает два аргумента:
- beginIndex: начальный индекс подстроки. Эта позиция индекса является включающей, т.е. символ с указанным индексом включен в подстроку.
- endIndex: конечный индекс подстроки. Эта позиция индекса является исключительной, т.е. символ с указанным индексом НЕ включен в подстроку.
String substring(int beginIndex)String substring(int beginIndex, int endIndex)
Метод возвращает подстроку между допустимыми начальным и конечным индексами. Если индексы недопустимы, то мы можем получить ошибку IndexOutOfBoundsException во время выполнения.
2. Примеры подстрок
Давайте рассмотрим несколько примеров, чтобы понять, как работает метод substring().
2.1. Использование beginIndex и endIndex
Передайте оба индекса(начальный и конечный), когда нам нужно найти подстроку, начиная с заданной позиции индекса до заданной конечной позиции индекса. Обратите внимание, что:
- beginIndex может быть больше endIndex.
- Оба индекса должны быть больше или равны 0.
- Оба индекса должны быть меньше длины строки.
- Если мы передадим один и тот же индекс для обоих аргументов, будет возвращена пустая строка.
В следующей программе мы находим подстроку между индексами 0 и 5. Помните, что конечный индекс является исключающим, поэтому символ в конечном индексе не включается в подстроку. В этом случае символ в конечном индексе является пробелом.

Аналогично мы можем искать подстроку между индексами от 2 до 8.

Assertions.assertEquals("llo Wo", str.substring(2, 8));
2.2.Использование только beginIndex
Если мы не передаем аргумент endIndex, подстрока берется до последнего символа строки. Другими словами, если не указано, значение endIndex всегда равно 'string.length() – 1'.
В следующем примере мы получаем подстроку из позиции индекса 6.

Assertions.assertEquals("World", str.substring(6));
3. Исключение выхода за пределы индекса
Как упоминалось ранее, если мы передадим недопустимый индекс(например, отрицательное значение индекса), которого нет в массиве символов, или начальный индекс больше конечного индекса, то мы получим исключение IndexOutOfBoundsException во время выполнения.
Assertions.assertThrows(IndexOutOfBoundsException.class,() -> { //invalid indexstr.substring(-1);});Assertions.assertThrows(IndexOutOfBoundsException.class,() -> { //begin index > end indexstr.substring(6, 4);});
4. Заключение
В этом коротком руководстве по Java мы научились получать подстроку указанной строки, используя начальный и конечный индексы. Мы изучили правила о допустимых значениях индекса, а начальный индекс является включающим, а конечный индекс является исключающим.