JavaScript hat Array.join()
js>["Bill","Bob","Steve"].join(" and ")
Bill and Bob and Steve
Hat Java so etwas? Ich weiß, dass ich mit StringBuilder selbst etwas aufbauen kann:
static public String join(List<String> list, String conjunction)
{
StringBuilder sb = new StringBuilder();
boolean first = true;
for (String item : list)
{
if (first)
first = false;
else
sb.append(conjunction);
sb.append(item);
}
return sb.toString();
}
... aber es macht keinen Sinn, dies zu tun, wenn so etwas bereits Teil des JDK ist.
String.join()
Methode. Werfen Sie einen Blick auf diese Antwort , wenn Sie mit Java 8 (oder neuer) stackoverflow.com/a/22577565/1115554Antworten:
Mit Java 8 können Sie dies ohne eine Bibliothek eines Drittanbieters tun.
Wenn Sie einer Sammlung von Zeichenfolgen beitreten möchten, können Sie die neue Methode String.join () verwenden:
Wenn Sie eine Sammlung mit einem anderen Typ als String haben, können Sie die Stream-API mit dem beitretenden Kollektor verwenden :
Die
StringJoiner
Klasse kann auch nützlich sein.quelle
assertThat(String.join(", ", Lists.newArrayList("1", null)), is("1, null"));
[a, b, c]
Einschließen der Klammern verbinden möchte .Iterable<CharSequence>
; Schnittstellenbeziehung:Iterable -> Collection -> List
Alle Verweise auf Apache Commons sind in Ordnung (und das verwenden die meisten Leute), aber ich denke, das Guava- Äquivalent Joiner hat eine viel schönere API.
Sie können den einfachen Join-Fall mit ausführen
aber auch leicht mit Nullen umgehen:
oder
und (nützlich genug für mich, um es gegenüber Commons-Lang zu bevorzugen), die Fähigkeit, mit Karten umzugehen:
Dies ist äußerst nützlich für das Debuggen usw.
quelle
.useForLastSeparator()
oder eine ähnliche Methode hinzufügen ? Auf diese Weise könnten Sie so etwas wie "und" nur zwischen den letzten beiden Elementen erhalten (mit "," für den Rest).separator
(der istfinal
). Alles, was ich in Guava gesehen habe, wo ich früher ein Apache Commons-Äquivalent verwendet habe, war in Guava so viel besser (sprich: sauberer, schneller, sicherer und im Allgemeinen nur robuster), mit weniger Edge-Case-Fehlern und Thread-Sicherheitsproblemen und kleinerer Speicherbedarf. Ihr "bestmöglicher" Leitfaden scheint bisher zuzutreffen.String.join()
Methode und eineStringJoiner
Klasse.Nicht sofort einsatzbereit, aber viele Bibliotheken haben ähnliche Eigenschaften:
Commons Lang:
Frühling:
quelle
Unter Android können Sie die TextUtils- Klasse verwenden.
quelle
String.join
erfordert min api level 26 auf android.Nein, in der Standard-Java-API gibt es keine solche Komfortmethode.
Es überrascht nicht, dass Apache Commons so etwas in seiner StringUtils-Klasse bereitstellt, falls Sie es nicht selbst schreiben möchten.
quelle
isEmpty()
Methode anstelle einer (statischen)join()
Methode inString
...: rollseyes: :)Drei Möglichkeiten in Java 8:
quelle
Mit einem Java 8-Kollektor kann dies mit dem folgenden Code durchgeführt werden:
Auch die einfachste Lösung in Java 8:
oder
quelle
Ich habe dieses geschrieben (ich benutze es für Bohnen und Exploits
toString
, also schreibe nichtCollection<String>
):aber
Collection
nicht von JSP unterstützt, so dass für TLD schrieb ich:und in die
.tld
Datei legen :und verwenden Sie es in JSP-Dateien als:
quelle
Collection<>
zuIterable<>
?Code, den Sie haben, ist der richtige Weg, wenn Sie JDK ohne externe Bibliotheken verwenden möchten. Es gibt keinen einfachen "Einzeiler", den Sie in JDK verwenden könnten.
Wenn Sie externe Bibliotheken verwenden können, empfehlen wir Ihnen, die org.apache.commons.lang.StringUtils- Klasse in der Apache Commons-Bibliothek zu überprüfen .
Ein Anwendungsbeispiel:
quelle
Ein orthodoxer Weg, dies zu erreichen, besteht darin, eine neue Funktion zu definieren:
Stichprobe:
Ausgabe:
quelle
separator
wäre viel suggestiver.Java 8 Lösung mit
java.util.StringJoiner
Java 8 hat eine
StringJoiner
Klasse. Aber Sie müssen noch ein bisschen Boilerplate schreiben, weil es Java ist.quelle
Sie können die Apache Commons-Bibliothek verwenden, die eine StringUtils-Klasse und eine Join-Methode enthält.
Überprüfen Sie diesen Link: https://commons.apache.org/proper/commons-lang/javadocs/api.2.0/org/apache/commons/lang/StringUtils.html
Beachten Sie, dass der obige Link mit der Zeit veraltet sein kann. In diesem Fall können Sie einfach im Web nach "apache commons StringUtils" suchen, um die neueste Referenz zu finden.
(in diesem Thread referenziert) Java-Entsprechungen von C # String.Format () und String.Join ()
quelle
Du kannst das:
Oder ein Einzeiler (nur wenn Sie nicht '[' und ']' wollen)
Hoffe das hilft.
quelle
Eine unterhaltsame Möglichkeit, dies mit reinem JDK in einer einzigen Dienstzeile zu tun:
Ausgabe:
Eine nicht zu perfekte und nicht zu lustige Art!
Ausgabe:
quelle
Möglicherweise möchten Sie die Apache Commons StringUtils-Verknüpfungsmethode ausprobieren:
http://commons.apache.org/lang/api/org/apache/commons/lang/StringUtils.html#join(java.util.Iterator , java.lang.String)
Ich habe festgestellt, dass Apache StringUtils jdks Spielraum aufnimmt ;-)
quelle
Wenn Sie Eclipse-Sammlungen (früher GS-Sammlungen ) verwenden, können Sie die
makeString()
Methode verwenden.Wenn Sie Ihren
List
in einen Eclipse-Sammlungstyp konvertieren können, können Sie den Adapter entfernen.Wenn Sie nur eine durch Kommas getrennte Zeichenfolge möchten, können Sie die Version verwenden
makeString()
, die keine Parameter akzeptiert.Hinweis: Ich bin ein Committer für Eclipse-Sammlungen.
quelle
Mit Java 1.8 Stream kann verwendet werden,
quelle
BEARBEITEN
Ich bemerke auch das
toString()
zugrunde liegende Implementierungsproblem und das Element, das das Trennzeichen enthält, aber ich dachte, ich wäre paranoid.Da ich diesbezüglich zwei Kommentare habe, ändere ich meine Antwort auf:
Welches sieht ziemlich ähnlich aus wie die ursprüngliche Frage.
Wenn Sie also nicht das ganze Glas zu Ihrem Projekt hinzufügen möchten, können Sie dies verwenden.
Ich denke, an Ihrem Originalcode ist nichts auszusetzen. Tatsächlich sieht die Alternative, die jeder vorschlägt, fast gleich aus (obwohl sie eine Reihe zusätzlicher Validierungen durchführt).
Hier ist es, zusammen mit der Apache 2.0-Lizenz.
Jetzt wissen wir, danke Open Source
quelle
", "
?Die Guava-API von Google hat auch .join (), obwohl Apache Commons (wie bei den anderen Antworten offensichtlich sein sollte) hier so ziemlich der Standard ist.
quelle
Java 8 bringt das
Methode, die mit null null sicher ist
prefix + suffix
für Nullwerte verwendet wird.Es kann auf folgende Weise verwendet werden:
Die
Collectors.joining(CharSequence delimiter)
Methode ruft nurjoining(delimiter, "", "")
intern auf.quelle
Sie können dies in den StringUtils von Spring Framework verwenden. Ich weiß, dass es bereits erwähnt wurde, aber Sie können diesen Code einfach nehmen und er funktioniert sofort, ohne dass Spring dafür benötigt wird.
quelle
Versuche dies:
quelle