1. Изменения строк

Строки в Java — это неизменяемые объекты (immutable). Так было сделано для того, чтобы класс-строку можно было сильно оптимизировать и использовать повсеместно. Например, в качестве ключей у коллекции HashMap рекомендуется использовать только immutable-типы.

Однако часто возникают ситуации, когда программисту все же было бы удобнее иметь String-класс, который можно менять. Который не создает новую подстроку при каждом вызове его метода.

Например, у нас есть очень большая строка и мы часто дописываем что-то в ее конец. В этом случае даже коллекция символов (ArrayList<Character>) может быть эффективнее, чем постоянное пересоздание строк и конкатенации объектов типа String.

Именно поэтому в язык Java все же добавили тип String, который можно менять. Называется он StringBuilder.

Создание объекта

Чтобы создать объект StringBuilder на основе существующей строки, нужно выполнить команду вида:

StringBuilder имя = new StringBuilder(строка);

Чтобы создать пустую изменяемую строку, нужно воспользоваться командой вида:

StringBuilder имя = new StringBuilder();

Список методов

Класс StringBuilder имеет два десятка полезных методов, вот самые важные из них:

Метод Описание
StringBuilder append(obj)
Преобразовывает переданный объект в строку и добавляет к текущей строке
StringBuilder insert(int index, obj)
Преобразовывает переданный объект в строку и вставляет в текущую строку
StringBuilder replace(int start, int end, String str)
Заменяет часть строки, заданную интервалом start..end на переданную строку
StringBuilder deleteCharAt(int index)
Удаляет из строки символ под номером index
StringBuilder delete(int start, int end)
Удаляет из строки символы, заданные интервалом
int indexOf(String str, int index)
Ищет подстроку в текущей строке
int lastIndexOf(String str, int index)
Ищет подстроку в текущей строке с конца
char charAt(int index)
Возвращает символ строки по его индексу
String substring(int start, int end)
Возвращает подстроку, заданную интервалом
StringBuilder reverse()
Разворачивает строку задом наперед.
void setCharAt(int index, char)
Изменяет символ строки, заданный индексом на переданный
int length()
Возвращает длину строки в символах

Вот краткое описание каждого метода


2. Краткое описание методов

Добавление к строке

Чтобы что-то добавить к изменяемой строке (StringBuilder), нужно воспользоваться методом append(). Пример:

Код Описание
StringBuilder builder = new StringBuilder("Привет");
builder.append("Пока");
builder.append(123);
Привет
ПриветПока
ПриветПока123

Преобразование к стандартной строке

Чтобы преобразовать объект StringBuilder к строке типа String, нужно просто вызвать у него метод toString(). Пример

Код Вывод на экран
StringBuilder builder = new StringBuilder("Привет");
builder.append(123);
String result = builder.toString();
System.out.println(result);
Привет123

Как удалить символ?

Чтобы удалить символ в изменяемой строке, вам нужно воспользоваться методом deleteCharAt(). Пример:

Код Вывод на экран
StringBuilder builder = new StringBuilder("Привет");
builder.deleteCharAt(2);
String result = builder.toString();
System.out.println(result);
Првет

Как заменить часть строки на другую?

Для этого есть метод replace(int begin, int end, String str). Пример:

Код Вывод на экран
StringBuilder builder = new StringBuilder("Привет");
builder.replace(2, 5, "Hello!");
String result = builder.toString();
System.out.println(result);
ПрHello!т

undefined
10
Задача
Java Syntax Pro, 10 уровень, 3 лекция
Недоступна
Экранирование символов
Выведи на экран следующий текст в две строки: It's Windows path: "C:\Program Files\Java\jdk-13.0.0\bin" It's Java string: \"C:\\Program Files\\Java\\jdk-13.0.0\\bin\" Подсказка: \” – экранирование двойной кавычки; \\ – экранирование обратной косой черты (\). Больше про экранирование символов и Esca

3. Полезные примеры работы со строками

Как развернуть строку задом наперед?

Для этой операции есть специальный метод — reverse(); Пример:

Код Вывод на экран
String str = "Привет";
StringBuilder builder = new StringBuilder(str);
builder.reverse();
String result = builder.toString();
System.out.println(result);
тевирП

Класс StringBuffer

Есть еще один класс — StringBuffer — это аналог класса StringBuilder, только его методы имеют модификатор synchronized. А это значит, что к объекту StringBuffer можно одновременно обращаться из нескольких потоков.

Зато он работает гораздо медленнее, чем StringBuilder. Такой класс может вам понадобиться, когда вы начнете активно изучать многопоточность в квесте Java Multithreading.


undefined
10
Задача
Java Syntax Pro, 10 уровень, 3 лекция
Недоступна
Кодировка Unicode
В публичный статический метод init(char[]) передается массив символов размером 9, который нужно заполнить следующими символами: 0 - '\u00A9' 1 - '\u004A' 2 - '\u0061' 3 - '\u0076' 4 - '\u0061' 5 - '\u0052' 6 - '\u0075' 7 - '\u0073' 8 - '\u0068' Чтобы посмотреть результат, запусти метод main().
undefined
10
Задача
Java Syntax Pro, 10 уровень, 3 лекция
Недоступна
Поздравление
Проинициализируй статические переменные следующими значениями: - partyFace - "\uD83E\uDD73" - balloon - "\uD83C\uDF88" - gift - "\uD83C\uDF81" - partyPopper - "\uD83C\uDF89" - cake - "\uD83C\uDF82" Чтобы посмотреть поздравление, запусти метод main().