654 Stimmen

Wie konvertiert man einen kommagetrennten String in eine Liste?

Gibt es eine eingebaute Methode in Java, mit der wir kommaseparierte Strings in einen Container (z. B. Array, Liste oder Vektor) umwandeln können? Oder muss ich dafür eigenen Code schreiben?

String commaSeparated = "item1 , item2 , item3";
List<String> items = //method that converts above string into list??

1174voto

AlexR Punkte 111534

Kommagetrennte Zeichenkette in Liste umwandeln

List<String> items = Arrays.asList(str.split("\\s*,\\s*"));

Der obige Code teilt die Zeichenkette an einem Begrenzungszeichen, das wie folgt definiert ist: zero or more whitespace, a literal comma, zero or more whitespace der die Wörter in die Liste einfügt und alle Leerzeichen zwischen den Wörtern und den Kommas entfernt.


Bitte beachten Sie, dass dies lediglich einen Wrapper für ein Array darstellt: Sie CANNOT zum Beispiel .remove() aus dem resultierenden List . Für eine aktuelle ArrayList müssen Sie weiter verwenden new ArrayList<String> .

239voto

ColinD Punkte 106101

Arrays.asList gibt eine feste Größe zurück List die durch das Array unterstützt werden. Wenn Sie eine normale veränderbare java.util.ArrayList müssen Sie dies tun:

List<String> list = new ArrayList<String>(Arrays.asList(string.split(" , ")));

Oder, mit Guave :

List<String> list = Lists.newArrayList(Splitter.on(" , ").split(string));

Mit einer Splitter gibt Ihnen mehr Flexibilität bei der Aufteilung der Zeichenfolge und ermöglicht es Ihnen beispielsweise, leere Zeichenfolgen in den Ergebnissen zu überspringen und Ergebnisse zu kürzen. Es hat auch weniger seltsames Verhalten als String.split und Sie müssen auch nicht durch Regex aufteilen (das ist nur eine Option).

85voto

duffymo Punkte 298898

Zwei Schritte:

  1. String [] items = commaSeparated.split("\\s*,\\s*");
  2. List<String> container = Arrays.asList(items);

68voto

Manu Punkte 3036
List<String> items= Stream.of(commaSeparated.split(","))
     .map(String::trim)
     .collect(Collectors.toList());

27voto

YoYo Punkte 8537

Wenn ein List das Endziel ist, wie der Auftraggeber sagte, dann ist die bereits akzeptierte Antwort immer noch die kürzeste und beste. Ich möchte jedoch Alternativen anbieten, indem ich Java 8 Streams Das bringt Ihnen mehr Vorteile, wenn es Teil einer Pipeline für die weitere Verarbeitung ist.

Indem das Ergebnis der Funktion .split (ein natives Array) in einen Stream gewickelt und dann in eine Liste umgewandelt wird.

List<String> list =
  Stream.of("a,b,c".split(","))
  .collect(Collectors.toList());

Wenn es wichtig ist, dass das Ergebnis als ArrayList wie im Titel des OPs angegeben, können Sie eine andere Collector Methode:

ArrayList<String> list = 
  Stream.of("a,b,c".split(","))
  .collect(Collectors.toCollection(ArrayList<String>::new));

Oder durch die Verwendung der RegEx-Parsing-Api:

ArrayList<String> list = 
  Pattern.compile(",")
  .splitAsStream("a,b,c")
  .collect(Collectors.toCollection(ArrayList<String>::new));

Beachten Sie, dass Sie immer noch erwägen könnten, die list Variable typisiert als List<String> anstelle von ArrayList<String> . Die generische Schnittstelle für List sieht immer noch ähnlich genug aus, um die ArrayList Umsetzung.

Für sich genommen scheinen diese Code-Beispiele nicht viel hinzuzufügen (außer mehr Tipparbeit), aber wenn Sie vorhaben, mehr zu tun, wie diese Antwort zur Konvertierung einer Zeichenkette in eine Liste von Longs veranschaulicht, dass die Streaming-API sehr leistungsfähig ist, da sie es ermöglicht, Ihre Operationen nacheinander in einer Pipeline zu verarbeiten.

Nur der Vollständigkeit halber.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X