Рубрики
Без рубрики

Присоединиться к массиву примитивов с сепаратором в Java

Узнайте, как соединить массив примитивов с символом или строкой сепаратора на Java.

Автор оригинала: baeldung.

Присоединиться к массиву примитивов с сепаратором в Java

1. Введение

В этом быстром учебнике мы научимся присоединиться к массиву примитивов с однопомеханым сепаратором в Java . В наших примерах мы рассмотрим два массива: массив int и множество char .

2. Определение проблемы

Начнем с определения массива int и множество char для примеров, а также символа сепаратора, который мы будем использовать, чтобы присоединиться к их содержимому:

int[] intArray = {1, 2, 3, 4, 5, 6, 7, 8, 9};
char[] charArray = {'a', 'b', 'c', 'd', 'e', 'f'};
char separatorChar = '-';
String separator = String.valueOf(separatorChar);

Обратите внимание, что мы включили оба char и Струнные сепаратор с некоторые из методов, которые мы покажем, требуют char аргумент, в то время как другие требуют Струнные аргумент .

Результаты операции по присоединению будут содержать “1-2-3-4-5-6-7-8-9” для int массив, и “a-b-c-d-e-f” для char массив.

3. Коллекционеры.присоединение ()

Начнем с одного из доступных методов API Java 8 Stream — Коллекционеры.присоединение () .

Во-первых, мы создаем Поток из массива примитивов, использующих Arrays.stream () метод, найденный в java.util пакет. Далее, мы сопоставим каждый элемент с Струнные . И, наконец, мы соурорим элементы с нашим сепаратором.

Начнем с нашего int массив:

String joined = Arrays.stream(intArray)
  .mapToObj(String::valueOf)
  .collect(Collectors.joining(separator));

При присоединении к нашей char массив с помощью этого метода, мы должны сначала обернуть char массив в ЧарБуффер а затем проецировать его на char снова. Это потому, что chars () метод возвращает Поток int Значения.

поток из обугливать .

Давайте присоединимся к нашей char массив:

String joined = CharBuffer.wrap(charArray).chars()
  .mapToObj(intValue -> String.valueOf((char) intValue))
  .collect(Collectors.joining(separator));

4. СтрингДжойнер

Как и Коллекционеры.присоединение () Этот подход использует API Stream, но вместо того, чтобы собирать элементы, он итерирует элементы и добавляет их к СтрингДжойнер пример:

StringJoiner intStringJoiner = new StringJoiner(separator);
Arrays.stream(intArray)
  .mapToObj(String::valueOf)
  .forEach(intStringJoiner::add);
String joined = intStringJoiner.toString();

Опять же, мы должны обернуть наши char массив в ЧарБуффер при использовании API потока:

StringJoiner charStringJoiner = new StringJoiner(separator);
CharBuffer.wrap(charArray).chars()
  .mapToObj(intChar -> String.valueOf((char) intChar))
  .forEach(charStringJoiner::add);
String joined = charStringJoiner.toString();

5. Апач Викисклад Ланг

Апач Викисклад Ланг библиотека предоставляет некоторые удобные методы в СтрингУтилс и ArrayUtils классы, которые мы можем использовать для присоединения к нашим примитивным массивам.

Чтобы использовать эту библиотеку, нам нужно добавить commons-lang3 зависимость к нашему пом.xml :


    org.apache.commons
    commons-lang3
    3.11

При работе с Струнные сепаратор, мы будем использовать оба СтрингУтилс и ArrayUtils .

Давайте использовать их вместе, чтобы присоединиться к нашей int массив:

String joined = StringUtils.join(ArrayUtils.toObject(intArray), separator);

Или, если мы используем примитивный char типа сепаратора, мы можем просто написать:

String joined = StringUtils.join(intArray, separatorChar);

Реализации для присоединения к нашей char массив очень похожи:

String joined = StringUtils.join(ArrayUtils.toObject(charArray), separator);

И при использовании char разделитель:

String joined = StringUtils.join(charArray, separatorChar);

6. Гуава

Гуава библиотека предоставляет Столяр класс, который мы можем использовать для присоединения к нашим массивам. Чтобы использовать Guava в нашем проекте, нам нужно добавить гуава Maven зависимость :


    com.google.guava
    guava
    27.0.1-jre

Давайте присоединимся к нашей int массив с использованием Столяр класс:

String joined = Joiner.on(separator).join(Ints.asList(intArray));

В этом примере мы также использовали Ints.asList() метод из Гуавы, который красиво превращает массив примитивов в Список Интегер .

Guava предлагает аналогичный метод для преобразования char массив к Список характер. В результате, присоединившись к нашей char массив очень похож на приведенный выше пример, который использовал int массив:

String joined = Joiner.on(separator).join(Chars.asList(charArray));

7. Стрингбилдер

if (array.length == 0) {
    return "";
}
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < array.length - 1; i++) {
    stringBuilder.append(array[i]);
    stringBuilder.append(separator);
}
stringBuilder.append(array[array.length - 1]);
String joined = stringBuilder.toString();

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

Эта быстрая статья иллюстрирует несколько способов соединить массив примитивов с данным символом или строкой сепаратора. Мы показали примеры использования родных решений JDK, а также дополнительных решений с использованием двух сторонних библиотек – Apache Commons Lang и Guava.

Как всегда, полный код, используемый в этой статье, доступен более на GitHub .