1. Метод length(): сколько символов в строке?
Метод length() возвращает количество символов в строке. Это не совсем то же самое, что «количество байт» (особенно если в строке есть эмодзи или символы Unicode), но для большинства задач — именно то, что нужно.
Пример использования
String name = "Василиса";
int length = name.length();
System.out.println("Количество букв в имени: " + length); // 8
Зачем это нужно
- Проверить, не ввёл ли пользователь пустую строку.
- Проверить минимальную/максимальную длину пароля.
- Узнать, сколько символов осталось до лимита (например, в SMS или твите).
Пример: проверка на пустую строку
String input = "";
if (input.length() == 0)
{
System.out.println("Строка пуста!");
}
Лайфхак: для проверки «пустоты» строки есть также метод isEmpty(), но о нём чуть позже.
Короткий FAQ
- Метод length() не принимает аргументов (скобки всегда пустые).
- Если строка состоит из пробелов, они тоже считаются символами!
- Если строка равна null, вызов length() приведёт к NullPointerException — сначала проверьте на null.
2. Метод substring(): извлекаем часть строки
Метод substring() позволяет получить подстроку — «отрезать» кусок по указанным индексам.
Существует две основные формы вызова:
- str.substring(startIndex) — с позиции startIndex до конца строки.
- str.substring(startIndex, endIndex) — с позиции startIndex до endIndex (НЕ включая символ с индексом endIndex).
Внимание: индексация символов в строке начинается с 0.
Примеры использования
Пример 1: Получить первые три буквы имени
String name = "Василиса";
String firstThree = name.substring(0, 3); // "Вас"
System.out.println(firstThree);
Пример 2: Получить расширение файла
String fileName = "document.pdf";
int dotIndex = fileName.indexOf(".");
String extension = fileName.substring(dotIndex + 1); // "pdf"
System.out.println(extension);
Пример 3: Последние 4 символа строки
String cardNumber = "1234567890123456";
String lastFour = cardNumber.substring(cardNumber.length() - 4); // "3456"
System.out.println("Последние 4 цифры: " + lastFour);
Особенности и нюансы
- Некорректные индексы (startIndex < 0, endIndex > длина, startIndex > endIndex) вызывают StringIndexOutOfBoundsException.
- Метод всегда возвращает новую строку — исходная не меняется.
- Вторая форма (с двумя параметрами) не включает символ с индексом endIndex.
String str = "abcdef";
// Индексы: 0 1 2 3 4 5
str.substring(1, 4) → "bcd" // символы с индексами 1, 2, 3
substring(start, end)
3. Метод indexOf(): ищем символ или подстроку
Метод indexOf() ищет позицию (индекс) первого вхождения заданного символа или подстроки.
- Если найдено — возвращает индекс (от 0).
- Если не найдено — возвращает -1.
Примеры использования
Пример 1: Найти первую точку в email
String email = "ivan.petrov@mail.com";
int dotIndex = email.indexOf('.');
System.out.println("Первая точка на позиции: " + dotIndex); // 4
Пример 2: Найти подстроку
String text = "Я люблю Java!";
int index = text.indexOf("Java");
System.out.println(index); // 8
Пример 3: Найти символ после определённой позиции
String s = "abracadabra";
int firstA = s.indexOf('a'); // 0
int secondA = s.indexOf('a', firstA + 1); // 3
System.out.println("Вторая 'a' на позиции: " + secondA);
Особенности и нюансы
- Если символ/подстрока встречаются несколько раз, возвращается индекс первого вхождения.
- Для поиска последнего вхождения используйте lastIndexOf().
- Для символа используйте одинарные кавычки: 'a'; для подстроки — двойные: "abc".
Пример: поиск расширения файла
String fileName = "report.final.version.docx";
int lastDot = fileName.lastIndexOf('.');
String extension = fileName.substring(lastDot + 1);
System.out.println("Расширение файла: " + extension); // "docx"
4. Метод charAt(): получаем символ по индексу
Метод charAt(index) возвращает символ строки по его индексу.
Примеры использования
Пример 1: Проверить первую букву строки
String city = "Минск";
char first = city.charAt(0); // 'М'
System.out.println("Первая буква: " + first);
Пример 2: Проверить, начинается ли строка с большой буквы
String word = "Java";
if (Character.isUpperCase(word.charAt(0)))
{
System.out.println("Слово начинается с большой буквы!");
}
Пример 3: Перебрать все символы строки
String text = "Привет";
for (int i = 0; i < text.length(); i++)
{
System.out.println("Символ #" + i + ": " + text.charAt(i));
}
Особенности и нюансы
- Индекс вне диапазона (например, -1 или >= длина) приведёт к StringIndexOutOfBoundsException.
- Метод возвращает значение типа char, а не строку.
5. Метод toCharArray(): преобразуем строку в массив символов
Метод toCharArray() — простой способ преобразовать строку в массив символов (char[]). Полезно для посимвольной обработки, сортировки, проверки и т.п.
Пример использования:
String text = "Hello";
char[] characters = text.toCharArray();
for (char c : characters)
{
System.out.println(c);
}
// Вывод:
// H
// e
// l
// l
// o
Зачем это нужно:
- Обработка символов: массивы удобнее для посимвольной логики (например, проверка на анаграммы).
- Совместимость: некоторые API ожидают char[] как аргумент.
6. Метод replace(): заменяем подстроки
Метод replace(CharSequence target, CharSequence replacement) заменяет все вхождения подстроки target на replacement. Возвращает новую строку, исходная не меняется.
Пример использования:
String sentence = "Я люблю программирование на Java.";
String newSentence = sentence.replace("Java", "Java 25");
System.out.println(newSentence);
// Вывод: Я люблю программирование на Java 25.
String email = "support@company.com";
String cleanEmail = email.replace("@", "[at]");
System.out.println(cleanEmail);
// Вывод: support[at]company.com
Особенности и нюансы
- Заменяются все вхождения.
- String неизменяем: replace() возвращает новую строку.
- Для сложных правил используйте replaceAll() с регулярным выражением.
7. Методы trim() и strip(): избавляемся от пробелов
Оба метода удаляют «невидимые» символы в начале и конце строки.
- trim() — классический метод: удаляет пробелы, табуляции, переводы строк и часть управляющих символов, но не все пробелы Unicode.
- strip() — современный метод: учитывает все виды пробелов по стандарту Unicode. Предпочтителен в новых проектах.
Пример использования:
String s1 = " Привет, мир! ";
System.out.println(s1.trim());
// Вывод: "Привет, мир!"
String s2 = " \u2005 Java 11 \u2005 "; // \u2005 — это Unicode-пробел
System.out.println("trim(): " + s2.trim());
System.out.println("strip(): " + s2.strip());
// Вывод:
// trim(): Java 11
// strip(): Java 11
Зачем это нужно:
- Очистка пользовательского ввода от лишних пробелов.
- Нормализация данных из файлов/логов перед обработкой.
8. Практика: решаем задачи
Задача 1: Проверка длины пароля
String password = "qwerty";
if (password.length() < 8)
{
System.out.println("Пароль слишком короткий!");
}
else
{
System.out.println("Пароль подходит.");
}
Задача 2: Извлечение имени из ФИО
String fullName = "Иванов Иван Иванович";
int firstSpace = fullName.indexOf(' ');
String name = fullName.substring(firstSpace + 1, fullName.indexOf(' ', firstSpace + 1));
System.out.println("Имя: " + name); // "Иван"
Задача 3: Проверка, что строка начинается с определённой буквы
String surname = "Петров";
if (surname.charAt(0) == 'П')
{
System.out.println("Фамилия начинается с буквы П");
}
Задача 4: Получить домен из email
String email = "vasya.pupkin@gmail.com";
int at = email.indexOf('@');
String domain = email.substring(at + 1);
System.out.println("Домен: " + domain); // "gmail.com"
Задача 5: Найти все вхождения буквы 'а' в строке
String s = "абракадабра";
int pos = s.indexOf('а');
while (pos != -1)
{
System.out.println("Буква 'а' найдена на позиции: " + pos);
pos = s.indexOf('а', pos + 1); //ищем с последней найденной позиции
}
9. Типичные ошибки при работе с методами String
Ошибка №1: Выход за границы строки
Очень часто путают индексы и обращаются к несуществующему символу/подстроке.
String s = "Java";
char c = s.charAt(4); // Ошибка! Индексы 0..3
String s = "Hello";
String sub = s.substring(3, 10); // Ошибка! Длина строки — 5
Ошибка №2: Путаница с включением/невключением индекса
Метод substring(start, end) включает символ с индексом start, но НЕ включает символ с индексом end.
Ошибка №3: Ожидание, что indexOf вернёт что-то кроме -1 при отсутствии подстроки
Проверяйте результат перед использованием, особенно если потом используете его в substring.
Ошибка №4: Неправильная обработка пустых строк
Если строка пустая (""), вызовы charAt(0) или substring(0, 1) приведут к ошибке. Сначала проверяйте длину.
Ошибка №5: Работа с null-строками
Если строка равна null, вызов любого метода (length(), substring() и т.д.) вызовет NullPointerException. Всегда проверяйте на null перед обработкой.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ