StringBuilder
Изменяемая строка: удобна, когда текст собирается по частям, особенно в цикле.
Доступно с: Java 5
Синтаксис
public final class StringBuilder implements CharSequenceПримеры
Сборка строки в цикле:
void main() {
StringBuilder sb = new StringBuilder();
for (int i = 1; i <= 5; i++) {
sb.append(i).append(' ');
}
IO.println(sb.toString().strip());
}Результат:
1 2 3 4 5Другие полезные методы — length(), setCharAt(), replace():
void main() {
var sb = new StringBuilder("hello world");
sb.setCharAt(0, 'H');
sb.replace(6, 11, "Java");
IO.println(sb);
IO.println(sb.length());
}Результат:
Hello Java
10Примечания
String неизменяем: каждое s = s + x создаёт новую строку, и в длинном цикле это медленно. StringBuilder меняет один и тот же буфер. Для одной строки вне цикла обычная конкатенация + вполне подходит — компилятор оптимизирует её сам.
StringBuilder не потокобезопасен. Старый класс StringBuffer с теми же методами синхронизирован, но медленнее и нужен редко. equals() у StringBuilder сравнивает ссылки, а не содержимое — сравнивайте sb.toString() или используйте compareTo().
См. также
- StringBuilder.append() — Добавляет значение в конец StringBuilder.
- StringBuilder.insert() — Вставляет значение в указанную позицию StringBuilder.
- StringBuilder.reverse() — Переворачивает содержимое StringBuilder задом наперёд.
- StringBuilder.toString() — Возвращает содержимое StringBuilder как обычную строку String.
- StringBuilder.deleteCharAt() — Удаляет один символ по индексу. Для диапазона есть delete(start, end).
В учебнике
- StringBuilder — StringBuilder в Java: изменяемая строка, append, insert, reverse, deleteCharAt, цепочки вызовов и сборка строки в цикле.