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.