JavaRush /Курсы /Java Multithreading /StringBuilder, StringBuffer

StringBuilder, StringBuffer

Java Multithreading
2 уровень , 8 лекция
Открыта

— Осталось разобраться с StringBuilder и считай, что мы закончили.

Как ты уже знаешь, StringBuilder – это аналог класса String, только изменяемый.

— А еще я помню, что компилятор сам генерирует код с использованием StringBuilder, когда мы просто складываем строки.

— Да, ты прав. Какая у тебя отличная память. Впрочем, как и у всех роботов. Все время забываю об этом.

Давай же разберемся, что можно делать с помощью класса StringBuilder:

1) У меня есть обычная строка, я хочу сделать ее изменяемой. Как мне это сделать?

String s = "Bender";
StringBuilder s2 = new StringBuilder(s);

2) Я хочу добавить символ к текущей «изменяемой строке»?

String s = "Bender";
StringBuilder s2 = new StringBuilder(s);
s2.append("!");

3) А как преобразовать StringBuilder обратно в строку?

String s = "Bender";
StringBuilder s2 = new StringBuilder(s);
s2.append("!");
s = s2.toString();

4) А если мне нужно удалить символ?

String s = "Bender";
StringBuilder s2 = new StringBuilder(s);
s2.deleteCharAt(2); //останется "Beder"

5) Я хочу заменить часть строки на другую?

String s = "Bender";
StringBuilder s2 = new StringBuilder(s);
s2.replace (3, 5, "_DE_"); //будет "Ben_DE_r"

6) Мне нужно развернуть строку задом наперед?

String s = "Bender";
StringBuilder s2 = new StringBuilder(s);
s2.reverse(); //будет "redneB";

— Круто. Спасибо, Элли, все понятно.

— Рада, что тебе понравилось.

Еще хотела бы напомнить, вроде об этом должен был сказать Билаабо.

Есть еще один класс – StringBuffer – это аналог класса StringBuilder, только его методы объявлены как synchronized. А значит, перед каждым вызовом такого метода Java-машина проверяет, занят ли объект, и если нет — помечает его как занятый. После выхода из метода – «освобождает» объект. Из-за этого такие вызовы работают медленнее. Не стоит без необходимости пользоваться StringBuffer.

Но если тебе нужен изменяемый объект String, к которому будут обращаться из нескольких нитей – лучше StringBuffer тебе не найти.

— Спасибо за информацию. Думаю, когда-нибудь она мне пригодится.

Комментарии (46)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Antariko Уровень 1
24 февраля 2025
Чем дальше я продвигаюсь, тем все меньше и меньше комментариев...
Никита Уровень 1
2 октября 2025
так оставляй комментарии почаще :)
Antariko Уровень 1
2 октября 2025
Лень) Оставлял в прошлом курсе джавы)) пы.сы. А так это этот же Обновление уровня спутало
No Name Уровень 12
23 ноября 2024
+ лекция в копилке
Максим Li Уровень 50
19 мая 2024
19.05.2024
Andrei Karavai Уровень 30
22 апреля 2024
— Осталось разобраться с StringBuilder и считай, что мы закончили. ага - и ещё добрая половина лекций до конца уровня😁
Ислам Уровень 33
12 марта 2024
Nice
Edil Kalmamatov Уровень 35
10 сентября 2021
значит у StringBuilder нет аналога String.replace(old,new) и String.replaceAll(old,new)?
Роман Кончалов Уровень 28 Expert
26 апреля 2022
Методы StringBuilder подразумевают многократное использование, в отличие от единичного для replace и replaceAll. Или сможете придумать сценарий, где replaceAll можно несколько раз на одной строке применить? 😉
Андрей Уровень 51
21 декабря 2023
Не понял вашу мысль.. следуя вашей логике, реверс тоже не нужен, так как он подразумевает однократное использование.
Галкин Юрий Уровень 41
25 августа 2021
> 2) Я хочу добавить символ к текущей «изменяемой строке»?

String s = "Bender";
StringBuilder s2 = new StringBuilder(s);
s2.append("!");
Это ошибка. Добавляли тут строку, хотя и длиной одного символа. А вот добавление символа выглядит так:

String s = "Bender";
StringBuilder s2 = new StringBuilder(s);
s2.append('!');
Кавычки другие.
Gans Electro Уровень 4
10 мая 2023
А ведь нет разницы
13 сентября 2024
Очковтирательство какое-то
Yarick8bit Уровень 35
12 августа 2021
Если Амиго робот, зачем его чему-то учить? Просто обновите прошивку или натренируйте ему нейронку на примерах кода. Неэффективно😁
milyasow Уровень 3
6 сентября 2022
Процессор старый и маслопровод может лопнуть.
Кирилл Уровень 51
10 июля 2023
Насколько помню, в предыстории говорится о крушении космического корабля на планете роботов, для его ремонта необходимо наличии рабочих рук, по всей видимости специализированных. Роботы были настолько примитивны что не обладали никакими системами ввода-вывода кроме аудио-визуальных, схожих с человеческими(глаза и уши) и обновление ПО, в их условиях, не представлялось возможным. Потому, экипажем корабля было принято решение провести обучение Java одной особи которая в последствии обучит своих сородичей, которые в свою очередь помогут с ремонтом корабля😁
hidden #2362257 Уровень 40
24 декабря 2020
Ну да, ну да
Юрий Уровень 31
17 мая 2020