Присоединиться к массиву примитивов с сепаратором в 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 .