Java StringJoiner

Научитесь использовать класс StringJoiner(представленный в Java 8 ) для объединения строк разными способами. Мы можем использовать его для объединения строк с разделителем и использовать символы префикса и/или суффикса вокруг конечной строки.

1. Создание StringJoiner

Мы можем создать экземпляр StringJoiner двумя способами. Первый конструктор принимает только разделитель, а второй конструктор принимает дополнительные строки префикса и суффикса.

 String DELIMITER = ",";String PREFIX = "[";String SUFFIX = "]";StringJoiner stringJoinerWithDelimiter = new StringJoiner(DELIMITER);StringJoiner stringJoinerWithPrefixSuffix = new StringJoiner(DELIMITER, PREFIX, SUFFIX);

Мы не можем передавать аргументы NULL, это приведет к исключению NullPointerException.

Assertions.assertThrows(NullPointerException.class,() -> {new StringJoiner(null);});

2. Значения по умолчанию

По умолчанию, если мы не добавляем строку в joiner, он возвращает пустую строку по умолчанию. Пустая строка зависит от конструктора, используемого для создания экземпляра StringJoiner.

  • Если используется только разделитель, значением по умолчанию будет пустая строка.
  • Если использованы префикс и суффикс, то значением по умолчанию будет строка, объединенная префиксом + суффиксом.
Assertions.assertEquals("", stringJoinerWithDelimiter.toString());Assertions.assertEquals("[]", stringJoinerWithPrefixSuffix.toString());

Мы можем изменить строку по умолчанию с помощью метода setEmptyValue().

stringJoinerWithDelimiter.setEmptyValue("BLANK");Assertions.assertEquals("BLANK", stringJoinerWithDelimiter.toString());

Значения префикса и суффикса по умолчанию — пустые строки.

3. Добавление строк

Мы можем использовать метод StringJoiner.add() для добавления строк, которые необходимо объединить.

stringJoinerWithDelimiter.add("alex");stringJoinerWithDelimiter.add("brian");stringJoinerWithDelimiter.add("charles");Assertions.assertEquals("alex,brian,charles", stringJoinerWithDelimiter.toString());

Если были использованы префикс и суффикс, то конечная строка будет содержать их добавленными.

stringJoinerWithPrefixSuffix.add("alex");stringJoinerWithPrefixSuffix.add("brian");stringJoinerWithPrefixSuffix.add("charles");Assertions.assertEquals("[alex,brian,charles]", stringJoinerWithPrefixSuffix.toString());

4. Объединение экземпляров StringJoiner

Возможно, что две части приложения объединили строки, и теперь их нужно объединить. Используйте метод StringJoiner.merge() для объединения двух экземпляров StringJoiner для получения одного результата.

Когда мы объединяем два джойнера с помощью joiner1.merge(joiner2) –

  • Содержимое joiner2 добавляется к joiner1.
  • Префикс и суффикс используются для joiner1.
  • Оба объединителя сохраняют свои разделители.

Давайте разберем процесс слияния на примере. В следующей программе Java мы создаем два объекта StringJoiner с разными разделителями, префиксами и суффиксами. Объединенный StringJoiner имеет префикс и суффикс от первого объединителя и разделители от обоих объединителей.

StringJoiner joiner1 = new StringJoiner(",", "[", "]");StringJoiner joiner2 = new StringJoiner("-", "{", "}");joiner1.add("a");joiner1.add("b");joiner2.add("1");joiner2.add("2");StringJoiner finalJoiner = joiner1.merge(joiner2);Assertions.assertEquals("[a,b,1-2]", finalJoiner.toString());

5. StringJoiner в Collectors.joining()

API Collectors.joining() является частью Java 8 Streams. Он объединяет поток строк(или поток примитивов с их строковым значением). Collectors.joining() внутренне использует класс StringJoiner.

String result = Stream.of("a", "b", "c").collect(Collectors.joining(",", "[", "]"));Assertions.assertEquals("[a,b,c]", result);

6. Разница между StringJoiner и StringBuilder

Используя StringBuilder, мы добавим каждую строку и разделитель в альтернативной последовательности.

StringBuilder builder = new StringBuilder();String result = builder.append("a").append(",").append("b").append(",").append("c").toString();

Используя StringJoiner с разделителем в конструкторе, нам нужно сосредоточиться только на строках для добавления. Разделитель будет добавлен автоматически.

stringJoinerWithDelimiter.add("a").add("b").add("c");

В целом, StringJoiner упрощает объединение строк по сравнению со StringBuilder.

7. Заключение

В этом руководстве по Java 8 StringJoiner мы научились создавать StringJoiner с помощью конструкторов и объединять его с другим экземпляром StringJoiner. Мы научились объединять строки, используя только разделители, а также строки префикса и суффикса. Мы также увидели, как StringJoiner использовался в Stream API с методом Collectors.joining().

В целом StringJoiner очень похож на классы StringBuilder и StringBuffer, но имеет более надежный API для добавления разделенных строк, но он не подходит для других задач форматирования.

Ссылки: StringJoiner Java Doc

Исходный код на Github

Прокрутить вверх