Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как объединить строки через разделитель

Короткий ответ

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.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.