it-swarm.com.de

Wie konvertiere ich einen durch Kommas getrennten String in ArrayList

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??
458
Jame

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.

894
AlexR

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).

169
ColinD

Zwei schritte:

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

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

22
Arvindvp6

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.

17
YoYo

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(",")));
14
Ishara
List<String> items = Arrays.asList(commaSeparated.split(","));

Das sollte für dich funktionieren.

13
Jason Wheeler
List<String> items= Stream.of(commaSeparated.split(","))
     .map(String::trim)
     .collect(toList());
12
Manu

sie können asList und Split kombinieren

Arrays.asList(CommaSeparated.split("\\s*,\\s*"))
10
corsiKa

Dieser Code wird helfen,

String myStr = "item1,item2,item3";
List myList = Arrays.asList(myStr.split(","));
6
Srinivasan.S

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]
5
Brad Parks

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*"));
 ...
4
Filippo Lauria

Sie können sie zuerst mit String.split(",") aufteilen und anschließend den zurückgegebenen String array mit Arrays.asList(array) in eine ArrayList

2
Saket

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());
2
i_am_zero

In Groovy können Sie die tokenize (Character Token) -Methode verwenden:

list = str.tokenize(',')
1
sivareddy963

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();
1
Jan Stanicek
List commaseperated = new ArrayList();
String mylist = "item1 , item2 , item3";
mylist = Arrays.asList(myStr.trim().split(" , "));

// enter code here
1
List<String> items = Arrays.asList(s.split("[,\\s]+"));
0
Nenad Bulatovic

Das gleiche Ergebnis können Sie mit der Splitter-Klasse erzielen.

var list = Splitter.on(",").splitToList(YourStringVariable)

(geschrieben in kotlin)

0
anoopbryan2

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);
0
Dulith De Costa