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() и выведите подстроку на экран.
Ожидаемый вывод:
HexJava: Подстрока
Работая со строками, мы часто решаем одну и ту же задачу — достать часть строки. Получить год из даты, имя из полного ФИО или первые символы из адреса электронной почты. В 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Ваше упражнение проверяется по этим тестам
import static org.assertj.core.api.Assertions.assertThat;
import java.io.ByteArrayOutputStream;
import java.io.FileDescriptor;
import java.io.FileOutputStream;
import java.io.PrintStream;
class AppTest {
public static void main(String[] args) {
final var expected = "Hex";
ByteArrayOutputStream out = new ByteArrayOutputStream();
System.setOut(new PrintStream(out));
App.main(null);
final var actual = out.toString().trim();
System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out)));
System.out.println(actual);
assertThat(actual).isEqualTo(expected);
}
}Решение учителя откроется через:
20:00
