Методы строк
У класса String десятки методов. Здесь собраны самые нужные: поиск подстроки, вырезание части, смена регистра, замена, разбиение. Помните главное правило из урока о строках: строка не меняется, каждый метод возвращает новую.
Поиск в строке
contains() проверяет, есть ли в строке подстрока, startsWith() и endsWith() — начинается ли и заканчивается ли строка ею. indexOf() возвращает индекс первого вхождения или -1, если его нет:
void main() {
String email = "anna@example.com";
IO.println(email.contains("@"));
IO.println(email.endsWith(".com"));
IO.println(email.indexOf("@"));
IO.println(email.indexOf("#"));
}Результат:
true
true
4
-1lastIndexOf() работает так же, но ищет последнее вхождение.
substring
substring(начало, конец) вырезает часть строки: символ с индексом начало входит, с индексом конец — нет. Если конец не указан, берётся всё до конца строки:
void main() {
String email = "anna@example.com";
int at = email.indexOf("@");
IO.println(email.substring(0, at));
IO.println(email.substring(at + 1));
}Результат:
anna
example.comРегистр и пробелы
toUpperCase() и toLowerCase() меняют регистр. strip() убирает пробелы по краям — это часто нужно для введённых пользователем данных:
void main() {
String input = " Олег ";
IO.println("[" + input.strip() + "]");
IO.println(input.strip().toUpperCase());
IO.println("JAVA".toLowerCase());
}Результат:
[Олег]
ОЛЕГ
javaДля сравнения без учёта регистра есть equalsIgnoreCase(): "Java".equalsIgnoreCase("JAVA") вернёт true.
replace
replace() заменяет все вхождения одной подстроки на другую:
void main() {
String phone = "8-900-123-45-67";
IO.println(phone.replace("-", ""));
IO.println("кот и кот".replace("кот", "пёс"));
}Результат:
89001234567
пёс и пёсsplit и join
split() разрезает строку по разделителю и возвращает массив частей. String.join() делает обратное — склеивает части через разделитель:
void main() {
String csv = "Анна,Олег,Мария";
String[] names = csv.split(",");
IO.println(names.length);
IO.println(names[1]);
IO.println(String.join(" | ", names));
}Результат:
3
Олег
Анна | Олег | МарияПустые части в конце split() отбрасывает: "a,b,,".split(",") даст массив из двух элементов.
Проверки и повтор
isEmpty() истинен для строки нулевой длины, isBlank() — ещё и для строки из одних пробелов. repeat() повторяет строку заданное число раз:
void main() {
IO.println("".isEmpty());
IO.println(" ".isEmpty());
IO.println(" ".isBlank());
IO.println("=".repeat(12));
}Результат:
true
false
true
============Частая ошибка
Методы строк не меняют исходную строку. Если не сохранить результат, он просто потеряется:
void main() {
String name = "анна";
name.toUpperCase();
IO.println(name);
}Результат:
аннаПрисвойте результат переменной: name = name.toUpperCase();.