Verbinden Sie das Array von Primitiven mit Separator in Java

1. Einleitung

In diesem kurzen Tutorial erfahren Sie, wie Sie ein Array von Grundelementen mit einem Einzelzeichen-Trennzeichen in Java verbinden . In unseren Beispielen betrachten wir zwei Arrays: ein Array von int und ein Array von char .

2. Das Problem definieren

Beginnen wir mit der Definition eines Arrays von int und eines Arrays von char für die Beispiele sowie des Trennzeichens, mit dem wir deren Inhalt verbinden:

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); 

Beachten Sie, dass wir beide eingeschlossen haben char und String Separator , da einige der Methoden , die wir zeigen , werden ein erfordern char Argument, während andere ein erfordern String Argument .

Die Ergebnisse der Verknüpfungsoperation enthalten "1-2-3-4-5-6-7-8-9" für das int- Array und "abcdef" für das char- Array.

3. Collectors.joining ()

Beginnen wir mit einer der verfügbaren Methoden der Java 8 Stream-API - Collectors.joining () .

Zunächst erstellen wir einen Stream aus einem Array von Grundelementen mit der im Paket java.util enthaltenen Methode Arrays.stream () . Als nächstes ordnen wir jedes Element String zu . Und schließlich verketten wir die Elemente mit unserem vorgegebenen Trennzeichen.

Beginnen wir mit unserem int- Array:

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

Wenn wir unser char- Array mit dieser Methode verbinden, müssen wir zuerst das char- Array in CharBuffer einschließen und es dann erneut auf char projizieren . Dies liegt daran, dass die chars () -Methode einen Stream von int- Werten zurückgibt .

Leider ist die Java - Stream API keine native Methode zur Verfügung stellen , um eine Verpackung Strom von char .

Lassen Sie uns unserem char- Array beitreten :

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

4. StringJoiner

Ähnlich wie bei Collectors.joining () verwendet dieser Ansatz die Stream-API, aber anstatt Elemente zu sammeln, durchläuft er Elemente und fügt sie einer StringJoiner- Instanz hinzu:

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

Auch hier müssen wir unser char- Array in CharBuffer einschließen, wenn wir die Stream-API verwenden:

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

5. Apache Commons Lang

Die Apache Commons Lang-Bibliothek bietet einige nützliche Methoden in den Klassen StringUtils und ArrayUtils , mit denen wir unsere primitiven Arrays verbinden können.

Um diese Bibliothek zu verwenden, müssen wir das hinzufügen commons-LANG3 Abhängigkeit unserer pom.xml :

 org.apache.commons commons-lang3 3.8.1 

Bei der Arbeit mit einem String- Trennzeichen werden sowohl StringUtils als auch ArrayUtils verwendet .

Verwenden wir diese zusammen, um unser int- Array zu verbinden:

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

Wenn wir einen primitiven Zeichentyp als Trennzeichen verwenden, können wir einfach schreiben:

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

Die Implementierungen für den Beitritt zu unserem char- Array sind ziemlich ähnlich:

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

Und wenn Sie ein Zeichentrennzeichen verwenden:

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

6. Guave

Die Guava-Bibliothek von Google bietet die Joiner- Klasse, mit der wir unsere Arrays verbinden können. Um Guava in unserem Projekt zu verwenden, müssen wir die Guaven- Maven-Abhängigkeit hinzufügen :

 com.google.guava guava 27.0.1-jre 

Verbinden wir unser int- Array mit der Joiner- Klasse:

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

In diesem Beispiel haben wir auch die Ints.asList () -Methode von Guava verwendet, mit der das Array von Grundelementen in eine Liste von Ganzzahlen umgewandelt wird .

Guava bietet ein ähnliches Verfahren zur Herstellung einer Umwandlung von char Array in eine Liste von Zeichen. Infolgedessen ähnelt das Verbinden unseres char- Arrays dem obigen Beispiel, in dem das int- Array verwendet wurde:

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

7. StringBuilder

Schließlich , wenn wir nicht so oder Java 8 oder Bibliotheken von Drittanbietern verwenden können, können wir manuell eine Reihe von Elementen mit verbinden String . In diesem Fall ist die Implementierung für beide Arten von Arrays identisch:

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. Fazit

Dieser kurze Artikel zeigt eine Reihe von Möglichkeiten, um ein Array von Grundelementen mit einem bestimmten Trennzeichen oder einer bestimmten Zeichenfolge zu verbinden. Wir haben Beispiele mit nativen JDK-Lösungen sowie zusätzliche Lösungen mit zwei Bibliotheken von Drittanbietern gezeigt - Apache Commons Lang und Guava.

Wie immer ist der vollständige Code, der in diesem Artikel verwendet wird, auf GitHub verfügbar.