JavaRush /Курсы /Java Syntax Pro /StringBuilder в Java

StringBuilder в Java

Java Syntax Pro
9 уровень , 6 лекция
Открыта

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!т


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.



Комментарии (262)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Анна Клушкина Уровень 11
6 января 2026
⛏ забавно что открытие новых лекций стоит всего 1 ед материи. Методы для работы со строками очень полезные
Букашка Уровень 13
14 января 2026
уже 15, инфляция)
Анна Клушкина Уровень 11
16 января 2026
Вот это повезло😅
C0N5P1RACY Уровень 21
10 декабря 2025
Я до этого уже знал за StringBuilder, из курса 25 SELF, но тут эта тема прям вовремя рассказана, я бы сказал что StringBuilder немного читерский способ решать некоторые задачи, который были даны ранее :)
Grigoryvvv Уровень 14 Expert
18 ноября 2025
18.11.2025 / 10 уровень
Anton Zorin Уровень 20
21 августа 2025
Если кому то стало интересно:

StringBuilder builder = new StringBuilder("Hello");
System.out.println(builder); // Автоматически вызовется toString()
// Эквивалентно:
System.out.println(builder.toString()); // Явный вызов
Почему: addTo() возвращает объект StringBuilder println() вызывает String.valueOf(builder) String.valueOf() вызывает builder.toString() Автоматически! Полученная строка выводится на экран
Руслан Уровень 48
5 июля 2025
Тема очень интересеная!!!🤑
Anonymous #3585174 Уровень 33
19 июня 2025
like
Leano Уровень 1
10 мая 2025
Эти темы на текущий момент очень понравились к изучению, т.к. то что мы делали до этого со строками - теперь решается всего лишь в пару строк кода, очень жаль, что практических задач для такой важной темы как работы со строками и StringBuilder - очень мало. P.S личный совет: искать задачки на похожие темы на других источниках или же просить ИИ (пример: ChatGPT) составить марафон задач по этим пройденным темам, если не получается самому что-то придумать нормальное - эффективности больше и лучше впитывается материал, когда практики много.
KemaOnes Уровень 4
15 апреля 2025
Друзья, я прекрасно понимаю тех, кому тяжело изучать программирование. У вас не получается решить задачу? Не можете понять тему? Иногда вы даже не понимаете, что требуется от вас в задаче? Это знакомо не только начинающим, вы такой не один. Если вам что то непонятно и вы тупите, это абсолютно нормально, каждый проходит через это. Это не значит, что вы хуже остальных. Не значит, что вы неспособны изучать программирование. Думаете, что кому то дается это легко и все идет как по маслу? Ошибаетесь! Я начал изучать разработку в 21 год, без ментора, в соло, как и большинство тут. Отмечу сразу данный курс javarush. Тут я узнал много нового, закреплял это все задачками, общался с ребятами с курса. Общение с другими людьми по духу сильно прокачивает вас. Еще я создал тг канал для ребят, которые только начинают свой путь. Там много полезной инфы по питону и джаве, да и целом про Backend. Как легко устроиться на первую работу и море мотивации. Сможете найти себе единоличников, общаться и узнавать новое. Буду рад каждому ) В общем, изучение было тяжелым, я мог сидеть над простой задачей час. И каждый раз ловил себя на мысли, может это все таки не мое и я себя обманываю? Уверен, что вы задавались таким же вопросом. Но я не сдался и продолжал, откладывал тяжелые темы и двигался вперед. Практиковался постоянно, регулярно что то изучал. Самое главное в этом деле, не прокрастинировать. Сейчас я работаю backend разработчиком в нестыдной компании. Потому что я не сдался и шел до конца. Уверен, что и у тебя получится! И запомните, если кажется, что учиться программированию легко, значит вы не учитесь.
Anonymous #3259551 Уровень 11
11 декабря 2025
О, спасибо, единомышленники порядком надоели, пойду к Вам в тг единоличников искать 🙂
Danya Уровень 17
31 марта 2025
как думаете к задачам на конвеер возваращаться или нет?
Ivan Уровень 16
20 мая 2025
нет
APTEM Уровень 51
22 января 2025
Теперь можно и двоично-шестнадцатеричный конвертер решать👨‍💻
23 января 2025
Тоже оставил его на потом)