StringBuilder
StringBuilder — класс из пакета java.lang, представляющий изменяемую последовательность символов. В отличие от String, который неизменяем (immutable), содержимое StringBuilder можно модифицировать без создания новых объектов.
Класс хранит символы во внутреннем массиве, который автоматически расширяется при необходимости. StringBuilder не является потокобезопасным — если нужна синхронизация между потоками, используйте StringBuffer.
Зачем нужен
Эффективное построение длинных строк в циклах (без создания тысяч промежуточных объектов).
Конкатенация большого количества фрагментов работает в разы быстрее, чем оператор
+с обычнымиString.Удобные методы для вставки, удаления, замены и реверса фрагментов.
Конструкторы
StringBuilder()— пустой буфер ёмкостью 16 символов.StringBuilder(int capacity)— пустой буфер заданной начальной ёмкости.StringBuilder(String str)— буфер с начальным содержимым из строки.StringBuilder(CharSequence seq)— буфер из любой последовательности символов.
Популярные методы
append(x)— добавить значение в конец (есть перегрузки для всех примитивов и объектов).insert(int offset, x)— вставить значение в указанную позицию.delete(int start, int end)— удалить символы в диапазоне[start, end).deleteCharAt(int index)— удалить один символ.replace(int start, int end, String str)— заменить диапазон новой строкой.reverse()— перевернуть содержимое.length()— текущая длина в символах.charAt(int index)/setCharAt(int index, char c)— чтение и запись символа.toString()— получить готовуюString.substring(int start[, int end])— извлечь подстроку.indexOf(String str)— найти позицию подстроки.
Пример 1. Построение строки в цикле
public class BuildString {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
for (int i = 1; i <= 5; i++) {
sb.append("№").append(i).append(" ");
}
System.out.println(sb.toString().trim());
}
}
Вывод:
№1 №2 №3 №4 №5
Пример 2. Цепочка вызовов
public class Chain {
public static void main(String[] args) {
String result = new StringBuilder("Alash")
.append("Ed")
.append(" ")
.append("Wiki")
.toString();
System.out.println(result);
}
}
Вывод:
AlashEd Wiki
Пример 3. Вставка и удаление
public class InsertDelete {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("Arduino Uno");
sb.insert(8, "R3 ");
System.out.println(sb);
sb.delete(0, 8);
System.out.println(sb);
}
}
Вывод:
Arduino R3 Uno
R3 Uno
Пример 4. Замена и реверс
public class ReplaceReverse {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("Robot Phobo");
sb.replace(0, 5, "Mini");
System.out.println(sb);
sb.reverse();
System.out.println(sb);
}
}
Вывод:
Mini Phobo
obohP iniM
Пример 5. Чтение и изменение символов
public class CharOps {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("ESP32");
System.out.println("Символ 0: " + sb.charAt(0));
sb.setCharAt(0, 'X');
System.out.println(sb);
System.out.println("Длина: " + sb.length());
}
}
Вывод:
Символ 0: E
XSP32
Длина: 5
Пример 6. Сравнение скорости с конкатенацией String
public class Speed {
public static void main(String[] args) {
int n = 50_000;
long t1 = System.nanoTime();
String s = "";
for (int i = 0; i < n; i++) s += "x";
long stringMs = (System.nanoTime() - t1) / 1_000_000;
long t2 = System.nanoTime();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < n; i++) sb.append('x');
long sbMs = (System.nanoTime() - t2) / 1_000_000;
System.out.println("String: " + stringMs + " ms");
System.out.println("StringBuilder: " + sbMs + " ms");
}
}
Вывод (примерные значения):
String: 650 ms
StringBuilder: 2 ms
Пример 7. Поиск и подстрока
public class FindSubstring {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("voltage=5V current=200mA");
int idx = sb.indexOf("current");
System.out.println("Позиция: " + idx);
System.out.println("Подстрока: " + sb.substring(idx));
}
}
Вывод:
Позиция: 10
Подстрока: current=200mA
Пример 8. Сборка CSV-строки
public class CsvBuilder {
public static void main(String[] args) {
String[] sensors = {"line_L", "line_C", "line_R"};
int[] values = {512, 480, 600};
StringBuilder csv = new StringBuilder();
for (int i = 0; i < sensors.length; i++) {
if (i > 0) csv.append(",");
csv.append(sensors[i]).append("=").append(values[i]);
}
System.out.println(csv);
}
}
Вывод:
line_L=512,line_C=480,line_R=600
См. также
Примечание
Описание основано на официальной документации Oracle Java SE 21 API (https://docs.oracle.com/en/java/javase/21/docs/api/). Материал распространяется на условиях Oracle Free Documentation License. Тексты на этой странице написаны редакцией AlashEd своими словами; примеры кода — авторские.