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

StringBuilder, StringBuffer

Открыта

— Осталось разобраться с 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 тебе не найти.

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

Комментарии (47)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Курбан
Уровень 36
20 марта, 07:09
не скажу, что легко, но мы идем не спеша. Не важно как ты двигаешься, главное не останавливайся ес же
Antariko
Уровень 1
24 февраля 2025, 07:09
Чем дальше я продвигаюсь, тем все меньше и меньше комментариев...
Никита
Уровень 1
2 октября 2025, 09:59
так оставляй комментарии почаще :)
Antariko
Уровень 1
2 октября 2025, 12:37
Лень) Оставлял в прошлом курсе джавы)) пы.сы. А так это этот же Обновление уровня спутало
No Name
Уровень 22
23 ноября 2024, 15:50
+ лекция в копилке
Максим Li Backend Developer
19 мая 2024, 16:15
19.05.2024
Andrei Karavai
Уровень 30
22 апреля 2024, 21:16
— Осталось разобраться с StringBuilder и считай, что мы закончили. ага - и ещё добрая половина лекций до конца уровня😁
Ислам
Уровень 33
12 марта 2024, 21:29
Nice
Edil Kalmamatov
Уровень 35
10 сентября 2021, 09:34
значит у StringBuilder нет аналога String.replace(old,new) и String.replaceAll(old,new)?
Роман Кончалов Java Developer Expert
26 апреля 2022, 09:49
Методы StringBuilder подразумевают многократное использование, в отличие от единичного для replace и replaceAll. Или сможете придумать сценарий, где replaceAll можно несколько раз на одной строке применить? 😉
Андрей
Уровень 51
21 декабря 2023, 07:38
Не понял вашу мысль.. следуя вашей логике, реверс тоже не нужен, так как он подразумевает однократное использование.
Галкин Юрий
Уровень 41
25 августа 2021, 19:46
> 2) Я хочу добавить символ к текущей «изменяемой строке»?
String s = "Bender";
StringBuilder s2 = new StringBuilder(s);
s2.append("!");
Это ошибка. Добавляли тут строку, хотя и длиной одного символа. А вот добавление символа выглядит так:
String s = "Bender";
StringBuilder s2 = new StringBuilder(s);
s2.append('!');
Кавычки другие.
Gans Electro
Уровень 50
10 мая 2023, 07:27
А ведь нет разницы
Илюха Будущий ЮниорJava - стажёр в ASTON
13 сентября 2024, 12:11
Очковтирательство какое-то
Yarick8bit PPC & Web Analyst
12 августа 2021, 09:27
Если Амиго робот, зачем его чему-то учить? Просто обновите прошивку или натренируйте ему нейронку на примерах кода. Неэффективно😁
milyasow
Уровень 3
6 сентября 2022, 20:50
Процессор старый и маслопровод может лопнуть.
Кирилл
Уровень 41
10 июля 2023, 08:19
Насколько помню, в предыстории говорится о крушении космического корабля на планете роботов, для его ремонта необходимо наличии рабочих рук, по всей видимости специализированных. Роботы были настолько примитивны что не обладали никакими системами ввода-вывода кроме аудио-визуальных, схожих с человеческими(глаза и уши) и обновление ПО, в их условиях, не представлялось возможным. Потому, экипажем корабля было принято решение провести обучение Java одной особи которая в последствии обучит своих сородичей, которые в свою очередь помогут с ремонтом корабля😁
hidden #2362257
Уровень 40
24 декабря 2020, 21:36
Ну да, ну да