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

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