Перейти к содержанию
Educora
Начальный15 мин3 / 18

Строки и StringBuilder

Научись работать с текстом: методы String, сравнение строк, форматирование и изменяемый StringBuilder.

Проверь себя
В этом уроке ты узнаешь
  • С помощью методов String извлекать части текста, искать и преобразовывать его
  • Правильно сравнивать строки с помощью equals
  • Собирать текст с помощью String.format и StringBuilder

Логины, SMS, описания товаров, поисковые запросы — значительная часть данных, с которыми работают программы, это текст. В Java текст представлен объектами класса String. В этом уроке ты научишься разрезать строки, искать в них, сравнивать их и эффективно собирать.

Методы String

Строка — это последовательность символов, и у каждого символа есть индекс. Индексы начинаются с 0: в строке "Baku" символ B имеет индекс 0, а u — индекс 3. У класса String десятки готовых методов; их вызывают через точку: text.length().

Java
public class Main {
    public static void main(String[] args) {
        String city = "Baku";
        String country = "Azerbaijan";
        String text = city + ", " + country;
        System.out.println(text);
        System.out.println(text.length());
        System.out.println(text.charAt(0));
        System.out.println(text.toUpperCase());
        System.out.println(text.indexOf("Azer"));
        System.out.println(text.substring(6));
        System.out.println(text.substring(0, 4));
        System.out.println(text.contains("ku"));
        System.out.println(text.replace("Baku", "Ganja"));
        System.out.println("  hello  ".trim() + "!");
    }
}
Ожидаемый результат
Baku, Azerbaijan
16
B
BAKU, AZERBAIJAN
6
Azerbaijan
Baku
true
Ganja, Azerbaijan
hello!
МетодЧто делаетВ примере
length()возвращает количество символов16
charAt(i)символ с индексом icharAt(0) → B
indexOf(s)где впервые начинается s (−1, если не найдено)indexOf("Azer") → 6
substring(a, b)часть от a до b (не включая b)substring(0, 4) → Baku
toUpperCase(), toLowerCase()переводит в верхний или нижний регистрBAKU, AZERBAIJAN
contains(s)есть ли s внутри строкиcontains("ku") → true
replace(a, b)заменяет все a на bGanja, Azerbaijan
trim()удаляет пробелы в начале и в концеhello

Строки неизменяемы

После создания объект String изменить нельзя — он неизменяемый (immutable). Методы вроде toUpperCase() не меняют старую строку, а возвращают новую. Чтобы сохранить результат, присвой его переменной.

Java
public class Main {
    public static void main(String[] args) {
        String name = "aysel";
        name.toUpperCase();
        System.out.println(name);
        name = name.toUpperCase();
        System.out.println(name);
    }
}
Ожидаемый результат
aysel
AYSEL

Сравнение строк

Оператор == сравнивает не текст строк, а то, являются ли они одним и тем же объектом в памяти. Чтобы сравнить содержимое, используй equals(), а чтобы не учитывать регистр букв — equalsIgnoreCase().

Java
public class Main {
    public static void main(String[] args) {
        String a = "java";
        String b = new String("java");
        String c = "JAVA";
        System.out.println(a == b);
        System.out.println(a.equals(b));
        System.out.println(a.equals(c));
        System.out.println(a.equalsIgnoreCase(c));
    }
}
Ожидаемый результат
false
true
false
true

Форматирование и склейка

Если собирать длинный текст через +, его становится трудно читать. Метод String.format() принимает шаблон: вместо %s подставляется строка, вместо %d — целое число, вместо %.1f — дробное число с одним знаком после запятой, а %% выводит знак процента. System.out.printf() сразу печатает такой шаблон, а %n означает новую строку.

Java
public class Main {
    public static void main(String[] args) {
        String name = "Elvin";
        int score = 47;
        double percent = 94.0;
        String report = String.format("%s scored %d points (%.1f%%)", name, score, percent);
        System.out.println(report);
        System.out.printf("Price: %.2f AZN%n", 12.5);
        System.out.println("a" + 1 + 2);
        System.out.println(1 + 2 + "a");
    }
}
Ожидаемый результат
Elvin scored 47 points (94.0%)
Price: 12.50 AZN
a12
3a
Десятичный разделитель зависит от региональных настроек компьютера: при азербайджанских, русских или турецких настройках ты увидишь 94,0 и 12,50.

Посмотри на две последние строки: + вычисляется слева направо. "a" + 1 — уже строка, поэтому 2 тоже приклеивается к ней как текст. А в 1 + 2 + "a" сначала складываются числа и только потом результат склеивается с текстом.

StringBuilder: изменяемая строка

Так как строки неизменяемы, каждая операция + создаёт новый объект. Когда текст собирается из сотен маленьких кусочков (например, в цикле), это впустую тратит память и время. **StringBuilder** — изменяемая строка: append() добавляет в конец, insert() вставляет в любое место, reverse() переворачивает, а toString() возвращает готовую String.

Java
public class Main {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("Hello");
        sb.append(", ");
        sb.append("Elvin").append('!');
        System.out.println(sb);
        sb.insert(0, ">> ");
        System.out.println(sb);
        System.out.println(sb.length());
        sb.reverse();
        System.out.println(sb);
        String word = "level";
        String reversed = new StringBuilder(word).reverse().toString();
        System.out.println(word.equals(reversed));
    }
}
Ожидаемый результат
Hello, Elvin!
>> Hello, Elvin!
16
!nivlE ,olleH >>
true

Последние строки проверяют палиндром — слово, которое одинаково читается в обе стороны: переворачиваем level и сравниваем с исходным. Вызовы можно объединять в цепочку append(...).append(...), потому что каждый append возвращает тот же самый StringBuilder.

Главное

  • Индексы строки начинаются с 0; последний символ имеет индекс length() - 1.
  • String неизменяем: методы вроде toUpperCase() и replace() возвращают новую строку.
  • Содержимое строк сравнивай через equals(), а не через ==.
  • String.format() и printf() собирают текст по шаблону: %s, %d, %.2f, %n.
  • StringBuilder — изменяемая строка: append, insert, reverse, toString.

Проверь себя

Вопросов: 10. Каждый правильный ответ приносит XP.

1 / 10
Что вернёт "Java".charAt(1)?