StringBuilder.append: примеры (JAVA)
StringBuilder.append(String str): StringBuilderОписание метода StringBuilder.append
StringBuilder.append это метод, который добавляет строковое представление переданного аргумента в конец текущей последовательности символов. Используется для эффективной конкатенации строк, особенно в циклах, поскольку не создает новый объект каждый раз, как это делает конкатенация через '+' для String.
Метод перегружен для различных типов:
- append(boolean b) добавляет строку "true" или "false".
- append(char c) добавляет один символ.
- append(char[] str) добавляет массив символов.
- append(char[] str, int offset, int len) добавляет часть массива.
- append(CharSequence s) добавляет реализацию CharSequence (String, StringBuilder, StringBuffer и др.).
- append(CharSequence s, int start, int end) добавляет подпоследовательность.
- append(double d) добавляет строковое представление числа.
- append(float f) добавляет строковое представление числа.
- append(int i) добавляет целое число.
- append(long lng) добавляет длинное целое.
- append(Object obj) вызывает toString() у объекта и добавляет результат.
- append(String str) добавляет строку.
- append(StringBuffer sb) добавляет содержимое StringBuffer.
- append(StringBuilder sb) добавляет содержимое другого StringBuilder (начиная с Java 1.5).
Возвращает сам объект StringBuilder, что позволяет использовать цепочку вызовов.
Примеры использования StringBuilder.append
StringBuilder sb = new StringBuilder("Java");
sb.append(" ").append(8).append(" is great");
System.out.println(sb); // Java 8 is greatJava 8 is great
StringBuilder sb2 = new StringBuilder();
sb2.append(true).append(", ").append(3.14f).append(", ").append('A');
System.out.println(sb2); // true, 3.14, Atrue, 3.14, A
char[] chars = {'a','b','c','d'};
StringBuilder sb3 = new StringBuilder();
sb3.append(chars, 1, 2);
System.out.println(sb3); // bcbc
StringBuilder sb4 = new StringBuilder("Hello ");
sb4.append((CharSequence) "World", 0, 5);
System.out.println(sb4); // Hello WorldHello World
Object obj = null;
StringBuilder sb5 = new StringBuilder();
sb5.append(obj);
System.out.println(sb5); // nullnull
Альтернативы в Java
В Java есть несколько способов объединения строк:
- StringBuffer аналог StringBuilder, но синхронизирован (потокобезопасен), медленнее. Рекомендуется только при многопоточном доступе.
- String.concat(String) создает новый объект String, что неэффективно в циклах.
- Оператор + для строк компилятор преобразует в StringBuilder в последовательных выражениях, но в цикле создает множество объектов.
- String.format удобен для форматирования, но медленнее и использует внутренний Formatter.
- String.join (Java 8+) объединение массива строк с разделителем.
Для производительной конкатенации в циклах предпочтительнее StringBuilder.
Аналоги в других языках
Многие языки имеют встроенные средства для сборки строк:
- PHP: оператор
.(точка) для конкатенации, но для больших объемов используютimplodeили буферы через массив. - JavaScript: оператор
+или+=, в современных версиях используют шаблонные литералы. Для накопления в цикле собирают массив и затемjoin(''). - Python: оператор
+(для небольшого количества), для цикла лучше собрать список и''.join(). - SQL: оператор
||(в SQLite, PostgreSQL) или функцияCONCAT()(MySQL). - C#: класс
StringBuilderс методомAppend, почти идентичен Java. - Lua: оператор
..для конкатенации, но для циклов используют таблицу иtable.concat. - Go: пакет
stringsс типомBuilderи методомWriteString. - Kotlin: функции
buildString { append(...) }иplus.
Примеры:
// JavaScript
let arr = ['a','b','c'];
let str = arr.join(''); // "abc""abc"
// Python
parts = ['Hello', 'World']
result = ' '.join(parts) # 'Hello World''Hello World'
// Go
var b strings.Builder
b.WriteString("Hello")
b.WriteString(" World")
s := b.String() // "Hello World""Hello World"
Типичные ошибки при использовании StringBuilder.append
- Присваивание результата append самому себе метод возвращает тот же объект, поэтому избыточное присваивание не вредно, но может сбивать с толку:
StringBuilder sb = new StringBuilder("a"); sb = sb.append("b"); // избыточно, sb.append("b") уже изменяет sb - Использование StringBuilder вместо String в простых конкатенациях для одной-двух строк проще использовать '+' или concat.
- Забыть вызвать toString() результат в виде StringBuilder, а не строка.
- Передача null append(null) добавляет строку "null". Иногда ожидается NullPointerException или пропуск. Для обработки null следует проверять явно.
- Смешивание StringBuilder и StringBuffer без необходимости может привести к ненужным синхронизациям.
- Использование append в цикле с большим количеством итераций, когда начальная емкость не задана может привести к частому расширению внутреннего буфера. Рекомендуется задавать capacity.
Изменения в методе append в последних версиях Java
Метод append не претерпел значительных изменений со времен появления StringBuilder в Java 1.5. Однако косвенные изменения:
- В Java 7 были улучшены алгоритмы работы с char array.
- В Java 8 появилась поддержка лямбда-выражений, но сам append не изменился.
- В Java 9 введены компактные строки (compact strings), что повлияло на внутреннее представление, но интерфейс метода остался прежним.
- В Java 11 добавлен метод isEmpty() для StringBuilder, который можно использовать после append для проверки.
- Метод append(CharSequence, int, int) был добавлен в Java 1.5 и не менялся.
- В Java 13-14 появились текстовые блоки (text blocks), но это не влияет на append.
Таким образом, append остается стабильным методом, подходящим для использования во всех современных версиях Java.
Расширенные примеры использования StringBuilder.append
Пример 1: append с подпоследовательностью CharSequence.
StringBuilder sb = new StringBuilder("The quick brown fox ");
CharSequence seq = "jumps over the lazy dog";
sb.append(seq, 6, 11); // "over "
System.out.println(sb);The quick brown fox over
Пример 2: append с массивом символов с указанием смещения и длины.
StringBuilder sb2 = new StringBuilder();
char[] data = {'J','a','v','a',' ','8',' ','i','s',' ','f','u','n'};
sb2.append(data, 0, 4); // "Java"
sb2.append(data, 11, 3); // "fun"
System.out.println(sb2); // "Javafun"Javafun
Пример 3: Цепочка вызовов после создания StringBuilder с заданной емкостью.
StringBuilder sb3 = new StringBuilder(50);
sb3.append("Hello").append(", ").append("World").append("!");
System.out.println(sb3);
System.out.println("Capacity: " + sb3.capacity());Hello, World! Capacity: 50
Пример 4: append с объектом, переопределяющим toString.
class Point { int x,y; Point(int x,int y){ this.x=x; this.y=y; } public String toString(){ return "("+x+","+y+")"; } }
StringBuilder sb4 = new StringBuilder("Point: ");
sb4.append(new Point(3,4));
System.out.println(sb4); // Point: (3,4)Point: (3,4)
Пример 5: append и производительность: в цикле лучше использовать один StringBuilder с указанием capacity.
int n = 10000;
StringBuilder sb5 = new StringBuilder(n * 5); // предполагаем среднюю длину
for (int i = 0; i < n; i++) {
sb5.append(i).append(" ");
}
String result = sb5.toString();
System.out.println("Length = " + result.length());Length = 48895 (примерно)
Пример 6: append с null объектом добавляет "null".
StringBuilder sb6 = new StringBuilder();
sb6.append((Object) null);
System.out.println("[" + sb6 + "]"); // [null][null]
Пример 7: Использование append с StringBuilder из другого StringBuilder (копирование).
StringBuilder source = new StringBuilder("source");
StringBuilder dest = new StringBuilder("dest ");
dest.append(source); // dest теперь "dest source"
System.out.println(dest);dest source
Пример 8: append с форматированием через Formatter (не метод append, но совместно).
StringBuilder sb7 = new StringBuilder();
Formatter formatter = new Formatter(sb7);
formatter.format("Value: %d, Text: %s", 42, "answer");
System.out.println(sb7); // Value: 42, Text: answerValue: 42, Text: answer
джава StringBuilder.append function comments
- джава StringBuilder.append - аргументы и возвращаемое значение
- Функция java StringBuilder.append - описание
- StringBuilder.append - примеры
- StringBuilder.append - похожие методы на java
- StringBuilder.append на javascript, c#, python, php
- StringBuilder.append изменения java
- Примеры StringBuilder.append на джава