JavaRush /Курсы /JAVA 25 SELF /Основные методы String

Основные методы String

JAVA 25 SELF
9 уровень , 3 лекция
Открыта

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 перед обработкой.

1
Задача
JAVA 25 SELF, 9 уровень, 3 лекция
Недоступна
Извлечение символа по индексу
Извлечение символа по индексу
1
Задача
JAVA 25 SELF, 9 уровень, 3 лекция
Недоступна
Поиск подстроки в строке
Поиск подстроки в строке
1
Задача
JAVA 25 SELF, 9 уровень, 3 лекция
Недоступна
Получение подстроки
Получение подстроки
1
Задача
JAVA 25 SELF, 9 уровень, 3 лекция
Недоступна
Проверка первой буквы и извлечение подстроки
Проверка первой буквы и извлечение подстроки
Комментарии (10)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Dmitriy Уровень 13
9 октября 2025
Текст информационный на русском, буква должна быть английская! Вы или уже все делайте на английском, или помечайте, в какой раскладке должна быть буква, отвратительно!
Михаил Уровень 13
13 ноября 2025
В условиях же указали: Возьмите в качестве примера строку "Example".
Vitalii Уровень 32 Expert
24 сентября 2025
В последней задаче надо проверять на 'E' английской расскладки. 'Е' русское у меня не пропускает
Alina Gabidulina Уровень 27
10 октября 2025
так там виден ввод слова, какое будет слово, естественно оно английское, и буква будет тоже английская
Vitalii Уровень 32 Expert
10 октября 2025
Железная логика )
Alina Gabidulina Уровень 27
11 октября 2025
а что не так?))
Vitalii Уровень 32 Expert
11 октября 2025
Всё так: я не понял, что проверяться будет именно это слово.
Dthmth Уровень 11
25 октября 2025
в IDE не отображается сразу, на сайте только видно про Example
Alina Gabidulina Уровень 27
26 октября 2025
Так ТЗ ни в программе ни на сайте не отличается и там есть такое предложение :Возьмите в качестве примера строку "Example".
Alexandervmalysh Уровень 50
20 сентября 2025
В примере правильного решения для задачи по проверке первой буквы содержится метод startsWith(), который не рассматривается в лекции, хотя можно решить с помощью charAt()