Comment convertir une chaîne séparée par des virgules en ArrayList?

Existe-t-il une méthode intégrée en Java qui nous permet de convertir des chaînes séparées par des virgules dans un conteneur (par exemple, un tableau, une liste ou un vecteur)? Ou dois-je écrire un code personnalisé pour cela?

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

Convertir une chaîne séparée par des virgules en liste

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

Le code ci-dessus divise la chaîne sur un délimiteur défini comme suit: zero or more whitespace, a literal comma, zero or more whitespace pour placer les mots dans la liste et réduire tout espace entre les mots et les virgules.


Veuillez noter que cela retourne simplement un wrapper sur un tableau: vous ne pouvez par exemple pas .remove() dans la List résultante. Pour un ArrayList réel, vous devez utiliser new ArrayList .

Arrays.asList renvoie une List taille fixe sauvegardée par le tableau. Si vous voulez un java.util.ArrayList mutable normal, vous devez le faire:

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

Ou, en utilisant Goyave :

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

L’utilisation d’un Splitter vous donne plus de flexibilité dans la façon dont vous divisez la chaîne et vous permet, par exemple, d’ignorer les chaînes vides dans les résultats et d’ajuster les résultats. Il a également un comportement moins étrange que Ssortingng.split et ne nécessite pas de division par regex (ce n’est qu’une option).

Deux étapes:

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

En voici une autre pour convertir CSV en ArrayList:

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

Vous imprime

-> chaîne
-> avec
-> virgule

Il n’y a pas de méthode intégrée pour cela, mais vous pouvez simplement utiliser la méthode split ().

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

Si une List est l’objective final, comme l’indique le PO, la réponse déjà acceptée rest la plus courte et la meilleure. Cependant, je souhaite vous proposer des alternatives à l’aide de Java 8 Streams , ce qui vous apportera plus d’avantages s’il fait partie d’un pipeline pour un traitement ultérieur.

En encapsulant le résultat de la fonction .split (un tableau natif) dans un stream, puis en le convertissant en liste.

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

S’il est important que le résultat soit stocké en tant que ArrayList conformément au titre de l’OP, vous pouvez utiliser une méthode Collector différente:

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

Ou en utilisant l’API d’parsing syntaxique RegEx:

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

Notez que vous pouvez toujours envisager de laisser la variable de list typée List au lieu de ArrayList . L’interface générique de List semble toujours suffisamment similaire à l’implémentation ArrayList .

En eux-mêmes, ces exemples de code ne semblent pas append beaucoup (sauf plus de frappe), mais si vous envisagez d’en faire plus, comme cette réponse à la conversion d’une chaîne en liste de Longs , l’API de diffusion est vraiment puissante en permettant pour canaliser vos opérations les unes après les autres.

Pour l’amour de, vous savez, l’exhaustivité.

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

Cela devrait fonctionner pour vous.

vous pouvez combiner asList et diviser

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

Un exemple d’utilisation de Collections .

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

Ce code ci-dessous peut vous aider,

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

Vous pouvez utiliser Guava pour diviser la chaîne et la convertir en une ArrayList. Cela fonctionne également avec une chaîne vide et renvoie une liste vide.

 import com.google.common.base.Splitter; import com.google.common.collect.Lists; Ssortingng commaSeparated = "item1 , item2 , item3"; // Split ssortingng into list, sortingmming each item and removing empty items ArrayList list = Lists.newArrayList(Splitter.on(',').sortingmResults().omitEmptySsortingngs().splitToList(commaSeparated)); System.out.println(list); list.add("another item"); System.out.println(list); 

les résultats suivants:

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

Vous pouvez d’abord les séparer en utilisant Ssortingng.split(",") , puis convertir le array Ssortingng renvoyé en ArrayList aide de Arrays.asList(array)

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

J’utilise généralement un modèle précompilé pour la liste. Et c’est aussi un peu plus universel car il peut considérer les parenthèses qui suivent certaines des expressions listToSsortingng.

 private static final Pattern listAsSsortingng = Pattern.comstack("^\\[?([^\\[\\]]*)\\]?$"); private List getList(Ssortingng value) { Matcher matcher = listAsSsortingng.matcher((Ssortingng) value); if (matcher.matches()) { Ssortingng[] split = matcher.group(matcher.groupCount()).split("\\s*,\\s*"); return new ArrayList<>(Arrays.asList(split)); } return Collections.emptyList(); 

Dans groovy, vous pouvez utiliser la méthode tokenize (Character Token):

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

Il existe de nombreuses façons de résoudre ce problème en utilisant des stream Java 8, mais IMO les suivants:

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

Vous pouvez le faire comme suit.

Cela supprime les espaces blancs et les divise par des virgules où vous n’avez pas à vous soucier des espaces blancs.

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

Même résultat que vous pouvez obtenir en utilisant la classe Splitter.

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

(écrit en kotlin)

Façon traditionnelle

Divisez la chaîne par une virgule et transmettez le résultat à Arrays.asList () :

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

Java 8

Avec Java 8, vous pouvez diviser la chaîne par une virgule, puis utiliser les méthodes Arrays.stream () et collect () pour générer une liste.

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

Référence: Java – Convertir une chaîne séparée par des virgules en liste

Ssortingng -> Conversion de collection : (Ssortingng -> Ssortingng [] -> Collection)

 // java version 8 Ssortingng 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())); 

Collection -> Chaîne [] conversion:

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

Ssortingng -> Ssortingng [] conversion:

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

Et Collection -> Collection :

 List list = new LinkedList<>(col); 

convertir Collection en chaîne sous forme de virgule séparée en Java 8

object listOfSsortingng contient [“A”, “B”, “C”, “D”] éléments-

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

La sortie est: – ‘A’, ‘B’, ‘C’, ‘D’

Et convertir les tableaux en liste dans Java 8

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