Как объединить строки через разделитель
Короткий ответ
String.join() склеивает элементы через разделитель:
void main() {
var names = List.of("Anna", "Oleg", "Boris");
IO.println(String.join(", ", names));
}Результат:
Anna, Oleg, BorisНе строки
String.join() принимает только строки. Числа и объекты сначала превратите в строки в потоке и соберите через Collectors.joining():
void main() {
var numbers = List.of(1, 2, 3);
String text = numbers.stream()
.map(String::valueOf)
.collect(Collectors.joining(" + "));
IO.println(text);
}Результат:
1 + 2 + 3Префикс и суффикс
У joining() есть вариант с началом и концом строки:
void main() {
var tags = List.of("java", "sql");
IO.println(tags.stream().collect(Collectors.joining(", ", "[", "]")));
}Результат:
[java, sql]Склейка в цикле
Если элементы появляются по одному, используйте StringJoiner — он сам ставит разделители только между элементами:
void main() {
var joiner = new StringJoiner(" | ");
for (int i = 1; i <= 3; i++) {
joiner.add("item " + i);
}
IO.println(joiner);
}Результат:
item 1 | item 2 | item 3Частая ошибка
Склеивать строки через += в большом цикле. Каждый += создаёт новую строку, и код становится медленным. Для склейки в цикле есть StringBuilder:
void main() {
var builder = new StringBuilder();
for (int i = 0; i < 5; i++) {
builder.append(i);
}
IO.println(builder);
}Результат:
01234Функции из этого ответа
- String.join() — Склеивает строки через разделитель.
- Collectors.joining() — Сборщик, который склеивает строки потока в одну.
- StringBuilder.append() — Добавляет значение в конец StringBuilder.