Gibt es in Java eine integrierte Methode, mit der wir durch Kommas getrennte Zeichenfolgen in einen Container (z. B. Array, List oder Vector) 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??
Komma getrennten String in Liste umwandeln
List<String> items = Arrays.asList(str.split("\\s*,\\s*"));
Der obige Code teilt die Zeichenfolge in ein Trennzeichen auf, das wie folgt definiert ist: zero or more whitespace, a literal comma, zero or more whitespace
. Dadurch werden die Wörter in die Liste eingefügt und alle Leerzeichen zwischen den Wörtern und Kommas ausgeblendet.
Bitte beachten Sie, dass dies lediglich einen Wrapper für ein Array zurückgibt: SieK&OUML;NNENnicht beispielsweise .remove()
aus der resultierenden List
. Für eine tatsächliche ArrayList
müssen Sie new ArrayList<String>
weiter verwenden.
Arrays.asList
gibt eine feste Größe List
zurück, die vom Array unterstützt wird. Wenn Sie einen normalen änderbaren Java.util.ArrayList
wünschen, müssen Sie Folgendes tun:
List<String> list = new ArrayList<String>(Arrays.asList(string.split(" , ")));
Oder verwenden Sie Guave :
List<String> list = Lists.newArrayList(Splitter.on(" , ").split(string));
Die Verwendung einer Variablen Splitter
gibt Ihnen mehr Flexibilität beim Teilen der Zeichenfolge. Außerdem können Sie leere Zeichenfolgen in den Ergebnissen überspringen und die Ergebnisse zuschneiden. Es hat auch weniger seltsames Verhalten als String.split
und es ist nicht erforderlich, dass Sie durch Regex aufteilen müssen (das ist nur eine Option).
Zwei schritte:
String [] items = commaSeparated.split("\\s*,\\s*");
List<String> container = Arrays.asList(items);
Hier ist eine weitere zum Konvertieren von CSV in ArrayList:
String str="string,with,comma";
ArrayList aList= new ArrayList(Arrays.asList(str.split(",")));
for(int i=0;i<aList.size();i++)
{
System.out.println(" -->"+aList.get(i));
}
Druckt dich
-> string
-> mit
-> komma
Wenn eine List
das Endziel ist, wie das OP feststellt, dann ist die bereits akzeptierte Antwort immer noch die kürzeste und die beste. Ich möchte jedoch mit Java 8 Streams Alternativen bereitstellen, die Ihnen mehr Nutzen bringen, wenn sie Teil einer Pipeline für die weitere Verarbeitung sind.
Indem Sie das Ergebnis der Funktion .split (ein natives Array) in einen Stream einbinden und dann in eine Liste konvertieren.
List<String> list =
Stream.of("a,b,c".split(","))
.collect(Collectors.toList());
Wenn es wichtig ist, dass das Ergebnis gemäß dem Titel des OP als ArrayList
gespeichert wird, können Sie eine andere Collector
-Methode verwenden:
ArrayList<String> list =
Stream.of("a,b,c".split(","))
.collect(Collectors.toCollection(ArrayList<String>::new));
Oder verwenden Sie die RegEx-Parsing-API:
ArrayList<String> list =
Pattern.compile(",")
.splitAsStream("a,b,c")
.collect(Collectors.toCollection(ArrayList<String>::new));
Beachten Sie, dass Sie dennoch in Betracht ziehen könnten, die Variable list
als List<String>
anstelle von ArrayList<String>
einzugeben. Die generische Schnittstelle für List
sieht der ArrayList
-Implementierung noch ziemlich ähnlich.
Diese Codebeispiele scheinen anscheinend nicht viel hinzuzufügen (außer mehr Eingabe), aber wenn Sie vorhaben, mehr zu tun, wie zum Beispiel diese Antwort beim Konvertieren eines Strings in eine Liste von Longs , ist dies die Streaming-API wirklich mächtig, indem Sie Ihre Operationen nacheinander pipeln lassen.
Der Vollständigkeit halber wissen Sie.
Es gibt keine integrierte Methode dafür, aber Sie können einfach die split () -Methode verwenden.
String commaSeparated = "item1 , item2 , item3";
ArrayList<String> items =
new ArrayList<String>(Arrays.asList(commaSeparated.split(",")));
List<String> items = Arrays.asList(commaSeparated.split(","));
Das sollte für dich funktionieren.
List<String> items= Stream.of(commaSeparated.split(","))
.map(String::trim)
.collect(toList());
sie können asList und Split kombinieren
Arrays.asList(CommaSeparated.split("\\s*,\\s*"))
Dieser Code wird helfen,
String myStr = "item1,item2,item3";
List myList = Arrays.asList(myStr.split(","));
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.
import com.google.common.base.Splitter;
import com.google.common.collect.Lists;
String commaSeparated = "item1 , item2 , item3";
// Split string into list, trimming each item and removing empty items
ArrayList<String> list = Lists.newArrayList(Splitter.on(',').trimResults().omitEmptyStrings().splitToList(commaSeparated));
System.out.println(list);
list.add("another item");
System.out.println(list);
gibt folgendes aus:
[item1, item2, item3]
[item1, item2, item3, another item]
Ein Beispiel mit Collections
.
import Java.util.Collections;
...
String commaSeparated = "item1 , item2 , item3";
ArrayList<String> items = new ArrayList<>();
Collections.addAll(items, commaSeparated.split("\\s*,\\s*"));
...
Sie können sie zuerst mit String.split(",")
aufteilen und anschließend den zurückgegebenen String array
mit Arrays.asList(array)
in eine ArrayList
Es gibt viele Möglichkeiten, dies mit Streams in Java 8 zu lösen, aber IMO sind die folgenden Liner einfach:
String commaSeparated = "item1 , item2 , item3";
List<String> result1 = Arrays.stream(commaSeparated.split(" , "))
.collect(Collectors.toList());
List<String> result2 = Stream.of(commaSeparated.split(" , "))
.collect(Collectors.toList());
In Groovy können Sie die tokenize (Character Token) -Methode verwenden:
list = str.tokenize(',')
Ich verwende normalerweise vorkompilierte Muster für die Liste. Dies ist auch etwas universeller, da Klammern berücksichtigt werden können, die einigen der listToString-Ausdrücke folgen.
private static final Pattern listAsString = Pattern.compile("^\\[?([^\\[\\]]*)\\]?$");
private List<String> getList(String value) {
Matcher matcher = listAsString.matcher((String) value);
if (matcher.matches()) {
String[] split = matcher.group(matcher.groupCount()).split("\\s*,\\s*");
return new ArrayList<>(Arrays.asList(split));
}
return Collections.emptyList();
List commaseperated = new ArrayList();
String mylist = "item1 , item2 , item3";
mylist = Arrays.asList(myStr.trim().split(" , "));
// enter code here
List<String> items = Arrays.asList(s.split("[,\\s]+"));
Das gleiche Ergebnis können Sie mit der Splitter-Klasse erzielen.
var list = Splitter.on(",").splitToList(YourStringVariable)
(geschrieben in kotlin)
Sie können es wie folgt tun.
Dadurch werden Leerzeichen entfernt und durch Kommas getrennt, wenn Sie sich keine Gedanken um Leerzeichen machen müssen.
String myString= "A, B, C, D";
//Remove whitespace and split by comma
List<String> finalString= Arrays.asList(myString.split("\\s*,\\s*"));
System.out.println(finalString);