Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Методы строк

У класса 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
-1

lastIndexOf() работает так же, но ищет последнее вхождение.

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();.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.