Gibt es in Java eine integrierte Methode, mit der wir durch Kommas getrennte Zeichenfolgen in einen Container (z. B. Array, Liste oder Vektor) konvertieren können? Oder muss ich dafür benutzerdefinierten Code schreiben?
String commaSeparated = "item1 , item2 , item3";
ArrayList<String> items = //method that converts above string into list??
java
string
collections
split
Jame
quelle
quelle
Antworten:
Konvertieren Sie einen durch Kommas getrennten String in eine Liste
Der obige Code teilt die Zeichenfolge in ein Trennzeichen auf, das wie
zero or more whitespace, a literal comma, zero or more whitespace
folgt definiert ist: Dadurch werden die Wörter in die Liste eingefügt und Leerzeichen zwischen den Wörtern und Kommas werden reduziert.Bitte beachten Sie, dass dies einfach einen Wrapper auf einem Array zurückgibt: Sie können zum Beispiel NICHT
.remove()
aus dem ErgebnisList
. Für eine tatsächlicheArrayList
müssen Sie weiter verwendennew ArrayList<String>
.quelle
\s
Entspricht einem beliebigen Leerzeichen. Der*
Wendet die Übereinstimmung null oder mehrmals an. Bedeutet\s*
also "mit einem Leerzeichen null oder mehrmals übereinstimmen". Wir suchen dies vor und nach dem Komma. Daher funktioniert die Aufteilung für Zeichenfolgen wie"item1 , item2 , item3"
, oder"item1,item2 ,item3"
usw. In Java müssen Sie den Backslash in Zeichenfolgen\\s*
"[\\s,]+"
Leerzeichen für Werte zu kürzen. Zum Beispiel" item1 , item2 , item3 , "
wird["item1", "item2", "item3"]
."[\\s,]+"
Wird auch auf den internen Bereich innerhalb eines durch Kommas getrennten Tokens aufgeteilt, behandelt es beide Leerzeichen als Trennzeichen, auch wenn kein Komma vorhanden ist, anstelle eines Kommas plus einer beliebigen Anzahl von umgebenden Leerzeichen."\\s*(,\\s*)+"
schneidet Leerzeichen nur um durch Kommas getrennte Token und ignoriert auch alle Zeichenfolgen, die nur Leerzeichen oder leer sind.Arrays.asList
Gibt eine feste GrößeList
zurück, die vom Array unterstützt wird. Wenn Sie ein normales Mutablejava.util.ArrayList
wollen, müssen Sie dies tun:Oder mit Guave :
Durch die Verwendung von a erhalten
Splitter
Sie mehr Flexibilität beim Teilen der Zeichenfolge und können beispielsweise leere Zeichenfolgen in den Ergebnissen überspringen und Ergebnisse zuschneiden. Es hat auch weniger seltsames Verhalten alsString.split
und erfordert nicht, dass Sie nach regulären Ausdrücken aufteilen (das ist nur eine Option).quelle
Arrays.asList
ein Wrapper um das native Array bereitgestellt wird (Vermeidung einer Elementkopie),new ArrayList(...)
eine solche Element-für-Element-Kopie genau ausgeführt wird. Wir sollten wahrscheinlich einen Ansatz bevorzugen, mit dem analysierte Elemente direkt zur gewünschten Zielsammlung hinzugefügt werden können.Zwei schritte:
String [] items = commaSeparated.split("\\s*,\\s*");
List<String> container = Arrays.asList(items);
quelle
split
wird als RegEx interpretiert.Hier ist eine andere für die Konvertierung von CSV in ArrayList:
Druckt Sie
quelle
Wenn a
List
das Endziel ist, wie im OP angegeben, ist die bereits akzeptierte Antwort immer noch die kürzeste und beste. Ich möchte jedoch Alternativen mit Java 8-Streams bereitstellen , die Ihnen mehr Nutzen bringen, wenn sie Teil einer Pipeline für die weitere Verarbeitung sind.Indem Sie das Ergebnis der .split-Funktion (ein natives Array) in einen Stream einbinden und dann in eine Liste konvertieren.
Wenn es wichtig ist, dass das Ergebnis
ArrayList
gemäß dem Titel aus dem OP gespeichert wird , können Sie eine andereCollector
Methode verwenden:Oder mithilfe der RegEx-Parsing-API:
Beachten Sie, dass Sie die
list
Variable weiterhin alsList<String>
anstelle von eingeben könnenArrayList<String>
. Die generische Oberfläche fürList
sieht immer noch ziemlich ähnlich aus wie dieArrayList
Implementierung .An sich scheinen diese Codebeispiele nicht viel hinzuzufügen (außer mehr Eingabe), aber wenn Sie vorhaben, mehr zu tun, wie diese Antwort zum Konvertieren eines Strings in eine Liste von Longs zeigt, ist die Streaming-API wirklich leistungsfähig, indem sie dies zulässt um Ihre Operationen nacheinander zu leiten.
Der Vollständigkeit halber.
quelle
quelle
collect(toList())
zucollect(Collectors.toList()
collect(toList())
wird der statische Import vonCollectors.toList()
für Kürze und Geläufigkeit verwendet :)Hierfür gibt es keine integrierte Methode, aber Sie können hier einfach die split () -Methode verwenden.
quelle
Das sollte für dich funktionieren.
quelle
Sie können asList und split kombinieren
quelle
Dieser Code wird helfen,
quelle
Sie können Guava verwenden, um die Zeichenfolge zu teilen und in eine ArrayList zu konvertieren. Dies funktioniert auch mit einer leeren Zeichenfolge und gibt eine leere Liste zurück.
gibt Folgendes aus:
quelle
Ein Beispiel mit
Collections
.quelle
Es gibt viele Möglichkeiten, dies mithilfe von Streams in Java 8 zu lösen, aber IMO sind die folgenden Einzeiler unkompliziert:
quelle
Sie können sie zuerst mit using teilen
String.split(",")
und dann den zurückgegebenen Stringarray
in einenArrayList
using konvertierenArrays.asList(array)
quelle
In groovy können Sie die Tokenize-Methode (Character Token) verwenden:
quelle
Das gleiche Ergebnis können Sie mit der Splitter-Klasse erzielen.
(geschrieben in Kotlin)
quelle
quelle
Normalerweise verwende ich ein vorkompiliertes Muster für die Liste. Und dies ist auch etwas universeller, da es Klammern berücksichtigen kann, die einigen der listToString-Ausdrücke folgen.
quelle
Wenn Ihre String-Liste in Kotlin so ist und Sie sie zum Konvertieren von String in ArrayList verwenden können, verwenden Sie diese Codezeile
quelle
quelle
Sie können dies wie folgt tun.
Dadurch werden Leerzeichen entfernt und durch Kommas getrennt, sodass Sie sich keine Gedanken über Leerzeichen machen müssen.
quelle
String -> Sammlungskonvertierung : (String -> String [] -> Sammlung)
Sammlung -> String [] Konvertierung:
String -> String [] Konvertierung:
Und Sammlung -> Sammlung :
quelle
Konvertieren Sie Collection in einen in Java 8 getrennten Komma
listOfString-Objekt enthält ["A", "B", "C", "D"] Elemente-
Die Ausgabe ist: - 'A', 'B', 'C', 'D'
Und konvertieren Sie Strings Array in List in Java 8
quelle
quelle
ArrayList
? Hast du die Frage überhaupt gelesen?ArrayList
. Ich habe die Änderungen auf die erste Revision zurückgesetzt (damit Sie sie sehen können) und die Formatierung der ersten Revision verbessert.