Come convertire String separate da virgola in ArrayList?

Esiste un metodo integrato in Java che ci consente di convertire una stringa separata da virgola in un contenitore (ad es. Array, elenco o vettore)? O devo scrivere un codice personalizzato per questo?

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

Converti Stringa separata da virgola in Elenco

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

Il suddetto codice divide la stringa su un delimitatore definito come: zero or more whitespace, a literal comma, zero or more whitespace che zero or more whitespace, a literal comma, zero or more whitespace le parole nella lista e comprimeranno gli spazi bianchi tra le parole e le virgole.


Si noti che questo restituisce semplicemente un wrapper su un array: NON è ansible ad esempio .remove() List risultante. Per un ArrayList effettivo è necessario utilizzare ulteriormente il new ArrayList .

Arrays.asList restituisce un List dimensioni fisse supportato dall’array. Se vuoi un normale java.util.ArrayList mutabile devi farlo:

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

Oppure, usando Guava :

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

L’uso di uno Splitter ti offre una maggiore flessibilità nel modo in cui dividi la stringa e ti dà la possibilità, ad esempio, di saltare le stringhe vuote nei risultati e di tagliare i risultati. Ha anche un comportamento meno strano di String.split e non richiede di dividere per espressioni regolari (questa è solo un’opzione).

Due passi:

  1. String [] items = commaSeparated.split(",");
  2. List container = Arrays.asList(items);

Eccone un altro per convertire CSV in ArrayList:

 String str="string,with,comma"; ArrayList aList= new ArrayList(Arrays.asList(str.split(","))); for(int i=0;i"+aList.get(i)); } 

Ti stampa

-> string
-> con
-> virgola

Non esiste un metodo integrato per questo, ma puoi semplicemente usare il metodo split () in questo.

 String commaSeparated = "item1 , item2 , item3"; ArrayList items = new ArrayList(Arrays.asList(commaSeparated.split(","))); 

Se una List è l’objective finale come indicato dall’OP, la risposta già accettata è ancora la più breve e la migliore. Tuttavia, desidero fornire alternative utilizzando gli stream Java 8 , che offrono maggiori vantaggi se fanno parte di una pipeline per l’ulteriore elaborazione.

Racchiudendo il risultato della funzione .split (un array nativo) in un stream e quindi convertendo in un elenco.

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

Se è importante che il risultato sia archiviato come ArrayList come da titolo dell’OP, puoi utilizzare un metodo di Collector diverso:

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

O usando l’API parsing di RegEx:

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

Si noti che si potrebbe ancora considerare di lasciare la variabile di list digitata come List invece di ArrayList . L’interfaccia generica per List sembra ancora abbastanza simile all’implementazione di ArrayList .

Da soli, questi esempi di codice non sembrano aggiungere molto (eccetto altri tipi di digitazione), ma se hai intenzione di fare di più, come questa risposta sulla conversione di una stringa in un elenco di Longs esemplifica, l’API di streaming è davvero potente consentendo per eseguire la pipeline delle operazioni una dopo l’altra.

Per amor di, sai, completezza.

 List items = Arrays.asList(commaSeparated.split(",")); 

Questo dovrebbe funzionare per te.

puoi combinare asList e split

 Arrays.asList(CommaSeparated.split("\\s*,\\s*")) 
 List items= Stream.of(commaSeparated.split(",")) .map(String::trim) .collect(toList()); 

Un esempio che utilizza Collections .

 import java.util.Collections; ... String commaSeparated = "item1 , item2 , item3"; ArrayList items = new ArrayList<>(); Collections.addAll(items, commaSeparated.split("\\s*,\\s*")); ... 

Questo codice sottostante può aiutarti,

 List myList = new ArrayList(); String myStr = "item1 , item2 , item3"; myList = Arrays.asList(myStr.split(" , ")); 

È ansible utilizzare Guava per dividere la stringa e convertirla in ArrayList. Funziona anche con una stringa vuota e restituisce una lista vuota.

 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 list = Lists.newArrayList(Splitter.on(',').trimResults().omitEmptyStrings().splitToList(commaSeparated)); System.out.println(list); list.add("another item"); System.out.println(list); 

emette il seguente:

 [item1, item2, item3] [item1, item2, item3, another item] 

È ansible prima dividerli utilizzando String.split(",") , quindi convertire l’ array String restituito in ArrayList utilizzando Arrays.asList(array)

 List commaseperated = new ArrayList(); String mylist = "item1 , item2 , item3"; mylist = Arrays.asList(myStr.trim().split(" , ")); // enter code here 

Di solito uso il modello precompilato per la lista. E anche questo è leggermente più universale poiché può considerare parentesi che seguono alcune delle espressioni listToString.

 private static final Pattern listAsString = Pattern.compile("^\\[?([^\\[\\]]*)\\]?$"); private List 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(); 

In groovy, puoi usare il metodo tokenize (Character Token):

 list = str.tokenize(',') 
 List items = Arrays.asList(s.split("[,\\s]+")); 

Ci sono molti modi per risolvere questo problema usando i flussi in Java 8 ma IMO le seguenti linee sono dirette:

 String commaSeparated = "item1 , item2 , item3"; List result1 = Arrays.stream(commaSeparated.split(" , ")) .collect(Collectors.toList()); List result2 = Stream.of(commaSeparated.split(" , ")) .collect(Collectors.toList()); 

Puoi farlo come segue.

Questo rimuove lo spazio bianco e diviso da una virgola in cui non è necessario preoccuparsi degli spazi bianchi.

  String myString= "A, B, C, D"; //Remove whitespace and split by comma List finalString= Arrays.asList(myString.split("\\s*,\\s*")); System.out.println(finalString); 

Lo stesso risultato si può ottenere usando la class Splitter.

var list = Splitter.on (“,”). splitToList (YourStringVariable)

(scritto in kotlin)

Modo tradizionale

Dividi la stringa con una virgola e passa il risultato a Arrays.asList () :

 public static List convertUsingAsList(String commaSeparatedStr) { String[] commaSeparatedArr = commaSeparatedStr.split("\\s*,\\s*"); List result = new ArrayList(Arrays.asList(commaSeparatedArr)); return result; } 

Java 8

Con Java 8, è ansible dividere la stringa con una virgola e quindi utilizzare i metodi Arrays.stream () e collect () per generare una lista.

 public static List convertUsingJava8(String commaSeparatedStr) { String[] commaSeparatedArr = commaSeparatedStr.split("\\s*,\\s*"); List result = Arrays.stream(commaSeparatedArr).collect(Collectors.toList()); return result; } 

Riferimento: Java – Converti Stringa separata da virgole in Elenco

String -> Conversione raccolta : (String -> String [] -> Raccolta)

 // java version 8 String str = "aa,bb,cc,dd,aa,ss,bb,ee,aa,zz,dd,ff,hh"; // Collection, // Set , List, // HashSet , ArrayList ... // (____________________________) // || || // \/ \/ Collection col = new HashSet<>(Stream.of(str.split(",")).collect(Collectors.toList())); 

Collezione -> String [] conversione:

 String[] se = col.toArray(new String[col.size()]); 

Conversione String -> String [] :

 String[] strArr = str.split(","); 

E Collezione -> Collezione :

 List list = new LinkedList<>(col); 

convertire Collection in string come una virgola separata in Java 8

L’object listOfString contiene [“A”, “B”, “C”, “D”] elementi-

 listOfString.stream().map(ele->"'"+ele+"'").collect(Collectors.joining(",")) 

L’output è: – ‘A’, ‘B’, ‘C’, ‘D’

E Converti Array di stringhe in List in Java 8

  String string[] ={"A","B","C","D"}; List listOfString = Stream.of(string).collect(Collectors.toList()); 
 ArrayList> mListmain = new ArrayList>(); String marray[]= mListmain.split(",");