StringBuilder.toString: примеры (JAVA)
StringBuilder.toString: StringОписание метода toString()
Метод StringBuilder.toString() преобразует текущую последовательность символов объекта StringBuilder в неизменяемый объект String. Он используется, когда требуется получить итоговую строку после всех операций добавления, вставки или замены. Метод не принимает аргументов и возвращает объект типа String, содержащий те же символы, что и StringBuilder на момент вызова. Вызов toString() не изменяет сам StringBuilder – его можно продолжать использовать для дальнейших модификаций. Внутренняя реализация может возвращать кэшированную строку или создавать новую копию массива символов в зависимости от версии Java и наличия изменений после последнего вызова.
Примеры использования
Простой пример создания и преобразования:
StringBuilder sb = new StringBuilder("Привет");
sb.append(", мир!");
String result = sb.toString();
System.out.println(result);Привет, мир!
Использование цепочки вызовов:
String s = new StringBuilder()
.append("Java")
.append(" ")
.append("17")
.toString();
System.out.println(s);Java 17
Пустой StringBuilder:
StringBuilder empty = new StringBuilder();
System.out.println(empty.toString().isEmpty());true
Альтернативные методы в Java
StringBuffer.toString() – полностью аналогичен по функционалу, но класс StringBuffer синхронизирован (потокобезопасен). Предпочтительнее StringBuilder в однопоточных сценариях из-за более высокой производительности.
String.concat() или оператор + – альтернатива для простых конкатенаций, но при многократном использовании в цикле создаёт много промежуточных объектов. StringBuilder эффективнее.
String.valueOf() – преобразует другие типы (int, char[] и т.д.) в строку, но не заменяет накопление последовательности символов.
CharSequence.toString() – интерфейс, реализуемый StringBuilder. Можно использовать полиморфно, если метод ожидает CharSequence.
Аналоги в других языках
PHP: метод (string) или implode() для массивов. Класс StringBuilder отсутствует, но есть Stringable интерфейс. Пример:
$sb = '';
$sb .= 'Hello ';
$sb .= 'World';
echo $sb; // результат: Hello WorldHello World
JavaScript: нет встроенного StringBuilder. Используют массив и join(''):
const parts = ['Hello', ' ', 'World'];
const result = parts.join('');
console.log(result);Hello World
Python: метод ''.join(list) для сборки строки. Пример:
parts = ['Hello', ' ', 'World']
result = ''.join(parts)
print(result)Hello World
C#: класс StringBuilder с методом ToString() – идентичен Java.
StringBuilder sb = new StringBuilder();
sb.Append("Hello");
sb.Append(" ");
sb.Append("World");
string result = sb.ToString();
Console.WriteLine(result);Hello World
Go: strings.Builder с методом String():
var sb strings.Builder
sb.WriteString("Hello ")
sb.WriteString("World")
result := sb.String()
fmt.Println(result)Hello World
Kotlin: функция buildString возвращает String:
val result = buildString {
append("Hello ")
append("World")
}
println(result)Hello World
Основное отличие – в других языках аналоги часто являются единственным способом эффективной сборки строк, тогда как в Java есть несколько вариантов (StringBuilder, StringBuffer, конкатенация).
Типичные ошибки
Забытый вызов toString(). Переменная типа StringBuilder передаётся туда, где ожидается String. Компилятор выдаст ошибку.
StringBuilder sb = new StringBuilder("data");
// Ошибочно: String s = sb;
String s = sb.toString(); // правильноПутаница с StringBuffer. Использование StringBuffer в однопоточном коде снижает производительность. Выбор должен быть осознанным.
Многократный вызов toString() без сохранения. Каждый вызов может создавать новую строку – снижение производительности.
StringBuilder sb = new StringBuilder("a");
String s1 = sb.toString(); // создаётся строка "a"
sb.append("b");
String s2 = sb.toString(); // создаётся новая строка "ab"
// Если нужна только последняя, не нужно вызывать toString после каждого appendNullPointerException. Вызов toString() на null-ссылке StringBuilder вызовет исключение.
StringBuilder sb = null;
// sb.toString(); // NullPointerExceptionИзменения в версиях
Метод StringBuilder.toString() не претерпел изменений сигнатуры или поведения с момента введения класса в Java 1.5. В Java 9 была изменена внутренняя реализация для поддержки компактных строк (Latin-1 кодировка), но для пользователя результат остался прежним – возвращается объект String. В Java 11 и позднее не вносилось никаких изменений, связанных с этим методом. Таким образом, код, использующий toString(), полностью обратно совместим.
Расширенные примеры
1. Построение CSV строки с использованием цикла. Сборка данных из массива в формат CSV:
String[] headers = {"Имя", "Возраст", "Город"};
String[][] rows = {
{"Анна", "25", "Москва"},
{"Иван", "30", "СПб"}
};
StringBuilder sb = new StringBuilder();
for (int i = 0; i < rows.length; i++) {
for (int j = 0; j < rows[i].length; j++) {
sb.append(rows[i][j]);
if (j < rows[i].length - 1) sb.append(",");
}
sb.append("\n");
}
String csv = sb.toString();
System.out.println(csv);Анна,25,Москва Иван,30,СПб
2. Использование toString() внутри лямбда-выражений. Например, для форматирования:
List items = List.of("a", "b", "c");
String result = items.stream()
.collect(StringBuilder::new, StringBuilder::append, StringBuilder::append)
.toString();
System.out.println(result); // результат: abc abc
3. Сравнение производительности с конкатенацией через +. Демонстрация преимущества StringBuilder внутри цикла:
int n = 10000;
StringBuilder sb = new StringBuilder();
long start = System.nanoTime();
for (int i = 0; i < n; i++) {
sb.append("x");
}
String s1 = sb.toString();
long end = System.nanoTime();
System.out.println("StringBuilder: " + (end - start) + " ns");
start = System.nanoTime();
String s2 = "";
for (int i = 0; i < n; i++) {
s2 += "x";
}
end = System.nanoTime();
System.out.println("String +: " + (end - start) + " ns");StringBuilder: 150000 ns String +: 35000000 ns (примерно)
4. Использование substring после toString. Преобразование и выделение подстроки:
StringBuilder sb = new StringBuilder("0123456789");
String full = sb.toString();
String part = full.substring(3, 7);
System.out.println(part); // результат: 34563456
джава StringBuilder.toString function comments
- джава StringBuilder.toString - аргументы и возвращаемое значение
- Функция java StringBuilder.toString - описание
- StringBuilder.toString - примеры
- StringBuilder.toString - похожие методы на java
- StringBuilder.toString на javascript, c#, python, php
- StringBuilder.toString изменения java
- Примеры StringBuilder.toString на джава