Java: Подстрока

Работая со строками, мы часто решаем одну и ту же задачу — достать часть строки. Получить год из даты, имя из полного ФИО или первые символы из адреса электронной почты. В Java для этого у строки есть метод substring().

Что такое подстрока

Подстрока — это часть строки, которая входит внутрь другой строки. В строке "12-08-2034" подстрокой может быть "2034", "12" или даже "-". Все зависит от того, какую информацию надо достать.

Допустим, нужен только год "2034". Каждый символ строки имеет свой индекс (позицию), отсчет идет с нуля:

'1' '2' '-' '0' '8' '-' '2' '0' '3' '4'
 0   1   2   3   4   5   6   7   8   9

Год начинается с индекса 6 и заканчивается на 9. Чтобы достать его, у строки вызывают метод substring() с двумя аргументами:

var value = "12-08-2034";
var year = value.substring(6, 10);
System.out.println(year); // => 2034

Метод вызывается у строки через точку. Первый аргумент задает индекс начала, второй задает индекс конца. Формат вызова такой:

строка.substring(начало, конец)

Символ с индексом начала входит в результат, а символ с индексом конца не входит. Конец удобно воспринимать как порядковый номер символа, который надо взять последним.

var value = "code-basics";

System.out.println(value.substring(5, 11)); // => basics (с 5 по 10 индекс)
System.out.println(value.substring(0, 7));  // => code-ba (с 0 по 6 индекс)
System.out.println(value.substring(2, 6));  // => de-b

Как все это посчитать? Когда работаем с конкретной строкой, почти всегда считаем на глаз.

Подстрока тоже строка

Метод substring() возвращает строку, даже если внутри только цифры. Значит, результат используют как обычную строку — печатают, соединяют, передают в другие методы. Результат одного вызова можно сразу передать в следующий:

var value = "01-12-9873";

var part = value.substring(3, 7); // => 12-9
System.out.println(part.substring(0, 2)); // => 12

Сначала получили подстроку "12-9", а потом достали из нее новую подстроку "12".

Подстрока до конца строки

Иногда часть строки нужна от какого-то символа и до самого конца. Для этого у substring() есть вариант с одним аргументом. Он задает только индекс начала, а конец метод сам берет равным концу строки.

var value = "Hexlet";

System.out.println(value.substring(3)); // => let (с 3 символа до конца)

Вызов value.substring(3) берет символы с индекса 3 и дальше до конца строки. Длина строки "Hexlet" равна 6, поэтому value.substring(3) и value.substring(3, 6) дают одинаковый результат let. Когда конец совпадает с длиной строки, второй аргумент можно опустить.

Выход за границы строки

Индексы должны попадать внутрь строки. Если передать индекс больше длины строки, метод выбросит ошибку:

var value = "Hexlet";
System.out.println(value.substring(0, 10));
// StringIndexOutOfBoundsException

В строке "Hexlet" шесть символов, поэтому индекс конца не может быть больше 6. Передали 10, и метод завершился ошибкой StringIndexOutOfBoundsException. Перед вызовом стоит убедиться, что индексы внутри границ строки.

Главное понять базовую структуру строка.substring(начало, конец), а на практике эти вызовы быстро войдут в привычку.

Задание

В переменной хранится строка "Hexlet". Достаньте из нее первые три символа с помощью метода substring() и выведите подстроку на экран.

Ожидаемый вывод:

Hex

Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются