In Java 8 ist diese Funktionalität sofort verfügbar. Ich empfehle dem Leser, durch die Antwort von @Marek Gregor zu scrollen (und sie zu verbessern ..)
Zum Nutzen der Leute, die nach dieser Antwort suchen, sollte wahrscheinlich beachtet werden, dass dies auch das Äquivalent eines Perl-Joins ist.
k-den
3
es sagt, dass es für mich undefiniert ist
Ninjaxor
@Ninjaxor 1. commons-lang * jar muss sich im Klassenpfad befinden 2. import org.apache.commons.lang3.StringUtils;
Peter - Wiedereinstellung Monica
9
Ich würde empfehlen, diese Antwort zu bearbeiten, um einen Verweis auf die String.join()in Java 8 eingeführte neue Methode anzuhängen . Auf diese Weise wird die große Anzahl von Personen, die diese akzeptierte Antwort lesen, von diesem Wissen profitieren. Derzeit ist die Antwort mit der höchsten Stimmenzahl, die diese Tatsache erwähnt, unten ziemlich verloren ...
Duncan Jones
1
Es ist erwähnenswert, dass String.join()dies nur für List<CharSequence>oder CharSequence[]Elemente funktionieren würde .
Enigo
71
Wenn Sie nach dem suchen, was Sie in Android verwenden können, ist es:
Dies ist eindeutig die beste Antwort für alle Android-Versionen, da Java 8 nur in Kürze auf Android verfügbar ist. Diese Lösung verwendet die eingebauten Android-Bibliotheken, anstatt diese albernen "enthalten eine riesige Bibliothek, um eine Aktion auszuführen" -Lösungen.
LukeStoneHm
Es ist September 2017, Java 8 für Android ist noch weit weg. Danke für diese Antwort!
Aenadon
57
In Java 8 können Sie verwenden
1) Stream-API:
String[] a =newString[]{"a","b","c"};String result =Arrays.stream(a).collect(Collectors.joining(", "));
Sie könnten eine solche Funktion leicht in etwa zehn Codezeilen schreiben:
String combine(String[] s,String glue){int k = s.length;if( k ==0){returnnull;}StringBuilderout=newStringBuilder();out.append( s[0]);for(int x=1; x < k;++x ){out.append(glue).append(s[x]);}returnout.toString();}
Gute Praxis Ihrer Meinung nach ... es gibt keinen universellen Standard für solche Dinge.
Phoebus
24
Aber wenn ich geschweifte Klammern eingefügt hätte, hätte das zwei weitere Codezeilen hinzugefügt, und ich hätte nicht behaupten können, dies in 11 Zeilen getan zu haben!
Jay
8
Das Problem ist, wenn Sie nach einer Weile oder jemand anderem in Eile eine weitere Zeile hinzufügen, wenn / für ohne Klammern; oder löschen Sie return null nach if (k == 0), was in einigen Fällen kompiliert wird, aber falsch ist. Dann ist es besser, eine zusätzliche Linie für diese schließende Klammer zu opfern (die Öffnung kann gleich bleiben, wenn / für Linie).
Mailand
16
Ich finde es großartig, dass die meisten Sprachen solche Funktionen in ihren Kern packen, die Java-Community jedoch alle dazu ermutigt, das Rad neu zu erfinden.
John Strickler
33
11 Zeilen? Bah! Ich kann es in 1 tun! Entfernen Sie einfach alle Zeilenumbruchzeichen in der Quelldatei.
Die Bibliothek von Google Guava verfügt ebenfalls über diese Funktion . Sie können das Beispiel String [] auch in der API sehen.
Achten Sie, wie bereits in der API beschrieben, auf die Unveränderlichkeit der Builder-Methoden.
Es kann eine Reihe von Objekten akzeptieren, sodass es in Ihrem Fall funktioniert. In meiner vorherigen Erfahrung habe ich versucht, mich einem Stapel anzuschließen, der iterierbar ist und gut funktioniert.
Verwenden Sie StringBuilder (nicht threadsicher) anstelle von StringBuffer (threadsicher), um eine bessere Leistung zu erzielen. Die Schnittstelle ist die gleiche.
Asaph
2
Dies scheint von snippets.dzone.com/posts/show/91 zu stammen . Die Kommentare deuten auf eine stark verbesserte Version hin: public static String join (Iterable <? Erweitert Objekt> pColl, String-Trennzeichen) {Iterator <? erweitert Object> oIter; if (pColl == null || (! (oIter = pColl.iterator ()) .hasNext ())) return ""; StringBuilder oBuilder = neuer StringBuilder (String.valueOf (oIter.next ())); while (oIter.hasNext ()) oBuilder.append (Trennzeichen) .append (oIter.next ()); return oBuilder.toString (); }
Quantum7
6
Wenn Sie hier gelandet sind und nach einer schnellen Konvertierung von Array zu String suchen, versuchen Sie es mit Arrays.toString () .
Erstellt eine String-Darstellung des Object[]übergebenen. Das Ergebnis ist von Klammern ( "[]") umgeben. Jedes Element wird über das in einen String konvertiert String.valueOf(Object)und durch getrennt ", ". Wenn das Array ist
null, "null"wird zurückgegeben.
VIELEN DANK! Die Zeichenfolgen sind durch "," getrennt und das Ganze hat "[]", was für mich in Ordnung ist.
John Henckel
5
Nur für die "Ich habe die kürzeste" Herausforderung, hier sind Minen;)
Iterativ:
publicstaticString join(String s,Object... a){StringBuilder o =newStringBuilder();for(Iterator<Object> i =Arrays.asList(a).iterator(); i.hasNext();)
o.append(i.next()).append(i.hasNext()? s :"");return o.toString();}
Gefällt dir mein 3-Zeilen-Weg nur mit den Methoden der String-Klasse?
staticStringjoin(String glue,String[] array){String line ="";for(String s : array) line += s + glue;return(array.length ==0)? line : line.substring(0, line.length()- glue.length());}
Falls Sie eine funktionale Java-Bibliothek verwenden und aus irgendeinem Grund keine Streams aus Java 8 verwenden können (was bei Verwendung des Android + Retrolambda-Plugins der Fall sein kann), finden Sie hier eine funktionale Lösung für Sie:
Dies funktioniert nur mit Trennzeichen der Länge 1 und erfordert 'magische Zahlen' (obwohl ziemlich lokal), wenn Sie ein Trennzeichen einer anderen Länge wünschen.
Maiwald
Sie können beim Anhängen mehrere Zeichen hinzufügen
Gaurav Adurkar
als einfach zu tun: op = op.substring (0, op.length () - ",". length ()); Was ist die große Sache?
Dennis
-3
java.util.Arrays hat eine 'asList'-Methode. Zusammen mit der API java.util.List / ArrayList erhalten Sie alles, was Sie brauchen:;
privatestaticString[]join(String[] array1,String[] array2){List<String> list =newArrayList<String>(Arrays.asList(array1));
list.addAll(Arrays.asList(array2));return list.toArray(newString[0]);}
Antworten:
Ab Java8 ist die Verwendung möglich
String.join()
.Erzeugt:
Andernfalls verfügt Apache Commons Lang über eine
StringUtils
Klasse mit einerjoin
Funktion, die Arrays zu a zusammenfügtString
.Beispielsweise:
Erzeugt Folgendes
String
:quelle
String.join()
in Java 8 eingeführte neue Methode anzuhängen . Auf diese Weise wird die große Anzahl von Personen, die diese akzeptierte Antwort lesen, von diesem Wissen profitieren. Derzeit ist die Antwort mit der höchsten Stimmenzahl, die diese Tatsache erwähnt, unten ziemlich verloren ...String.join()
dies nur fürList<CharSequence>
oderCharSequence[]
Elemente funktionieren würde .Wenn Sie nach dem suchen, was Sie in Android verwenden können, ist es:
beispielsweise:
quelle
In Java 8 können Sie verwenden
1) Stream-API:
2) Neue String.join-Methode: https://stackoverflow.com/a/21756398/466677
3) java.util.StringJoiner-Klasse: http://docs.oracle.com/javase/8/docs/api/java/util/StringJoiner.html
quelle
Sie könnten eine solche Funktion leicht in etwa zehn Codezeilen schreiben:
quelle
Ein kleiner Mod anstelle von substring ():
quelle
.append()
zweimal verwenden,String
anstatt sie zu verketten und dann an den Builder anzuhängen?Wie bei vielen Fragen in letzter Zeit hilft Java 8:
Java 8 hat eine neue statische Methode hinzugefügt,
java.lang.String
die genau das tut, was Sie wollen:Es benutzen:
Ergebnisse in:
quelle
Die Bibliothek von Google Guava verfügt ebenfalls über diese Funktion . Sie können das Beispiel String [] auch in der API sehen.
Achten Sie, wie bereits in der API beschrieben, auf die Unveränderlichkeit der Builder-Methoden.
Es kann eine Reihe von Objekten akzeptieren, sodass es in Ihrem Fall funktioniert. In meiner vorherigen Erfahrung habe ich versucht, mich einem Stapel anzuschließen, der iterierbar ist und gut funktioniert.
Probe von mir:
druckt aus:
|i am a coder|
quelle
Gegeben:
Dann als Alternative zu Coobirds Antwort, wo der Kleber "," ist:
Oder um mit einer anderen Zeichenfolge zu verketten, z. B. "& amp;".
Dies funktioniert jedoch NUR, wenn Sie wissen, dass die Werte im Array oder in der Liste NICHT die Zeichenfolge "," enthalten.
quelle
Arrays.asList(a).toString()
arbeitete für das, was ich tun wollteWenn Sie das Spring Framework verwenden , haben Sie die StringUtils- Klasse:
quelle
Nicht im Kern, nein. Eine Suche nach "Java Array Join String Glue" gibt Ihnen jedoch einige Code-Schnipsel, wie Sie dies erreichen können.
z.B
quelle
Wenn Sie hier gelandet sind und nach einer schnellen Konvertierung von Array zu String suchen, versuchen Sie es mit Arrays.toString () .
quelle
Nur für die "Ich habe die kürzeste" Herausforderung, hier sind Minen;)
Iterativ:
Rekursiv:
quelle
copyOfRange()
").Nichts eingebaut, von dem ich weiß.
Apache Commons Lang hat eine Klasse namens,
StringUtils
die viele Verknüpfungsfunktionen enthält.quelle
So mache ich es.
quelle
Eine ähnliche Alternative
quelle
Mein Spin.
quelle
Gefällt dir mein 3-Zeilen-Weg nur mit den Methoden der String-Klasse?
quelle
StringBuilder
Sie, wenn Sie Effizienz benötigen: PUm "str1, str2" von "str1", "str2", "" zu erhalten:
Sie können auch eine zusätzliche Nullprüfung hinzufügen
quelle
Falls Sie eine funktionale Java-Bibliothek verwenden und aus irgendeinem Grund keine Streams aus Java 8 verwenden können (was bei Verwendung des Android + Retrolambda-Plugins der Fall sein kann), finden Sie hier eine funktionale Lösung für Sie:
Beachten Sie, dass dies nicht der effizienteste Ansatz ist, aber für kleine Listen gut funktioniert.
quelle
Ich mache es so mit einem StringBuilder:
quelle
s + delimiter
(Zeichenfolgenverkettung mit dem Plus-Operator) macht den gesamten Zweck der Verwendung von a zunichteStringBuilder
.quelle
java.util.Arrays hat eine 'asList'-Methode. Zusammen mit der API java.util.List / ArrayList erhalten Sie alles, was Sie brauchen:;
quelle