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

1. Vue d'ensemble

Dans ce didacticiel, nous allons examiner la conversion d'une chaîne séparée par des virgules en une liste de chaînes. De plus, nous allons transformer une chaîne d'entiers séparés par des virgules en une liste d' entiers .

2. Dépendances

Certaines des méthodes que nous utiliserons pour nos conversions nécessitent les bibliothèques Apache Commons Lang 3 et Guava. Alors, ajoutons-les à notre fichier pom.xml :

 org.apache.commons commons-lang3 3.8.1   com.google.guava guava 27.0.1-jre 

3. Définir notre exemple

Avant de commencer, définissons deux chaînes d'entrée que nous utiliserons dans nos exemples. La première chaîne, pays, contient plusieurs chaînes séparées par une virgule et la deuxième chaîne, ranks, comprend des nombres séparés par une virgule:

String countries = "Russia,Germany,England,France,Italy"; String ranks = "1,2,3,4,5,6,7";

Et, tout au long de ce didacticiel, nous convertirons les chaînes ci-dessus en listes de chaînes et d'entiers que nous stockerons dans:

List convertedCountriesList; List convertedRankList;

Enfin, après avoir effectué nos conversions, les résultats attendus seront:

List expectedCountriesList = Arrays.asList("Russia", "Germany", "England", "France", "Italy"); List expectedRanksList = Arrays.asList(1, 2, 3, 4, 5, 6, 7);

4. Core Java

Dans notre première solution, nous allons convertir une chaîne en une liste de chaînes et d'entiers en utilisant le noyau Java.

Tout d'abord, nous allons diviser notre chaîne en un tableau de chaînes à l'aide de split, une méthode utilitaire de classe String . Ensuite, nous utiliserons Arrays.asList sur notre nouveau tableau de chaînes pour le convertir en une liste de chaînes:

List convertedCountriesList = Arrays.asList(countries.split(",", -1));

Transformons maintenant notre chaîne de nombres en une liste d'entiers.

Nous utiliserons la méthode split pour convertir notre chaîne de nombres en un tableau de chaînes. Ensuite, nous convertirons chaque chaîne de notre nouveau tableau en un entier et l'ajouterons à notre liste :

String[] convertedRankArray = ranks.split(","); List convertedRankList = new ArrayList(); for (String number : convertedRankArray) { convertedRankList.add(Integer.parseInt(number.trim())); }

Dans ces deux cas, nous utilisons la méthode utilitaire de division de la classe String pour diviser la chaîne séparée par des virgules en un tableau de chaînes.

Notez que la méthode de fractionnement surchargée utilisée pour convertir notre chaîne de pays contient la deuxième limite de paramètre , pour laquelle nous avons fourni la valeur -1. Cela spécifie que le motif de séparation doit être appliqué autant de fois que possible.

La méthode de fractionnement que nous avons utilisée pour fractionner notre chaîne d'entiers ( rangs ) utilise zéro comme limite , et ignore donc les chaînes vides, tandis que la division utilisée sur la chaîne de pays conserve les chaînes vides dans le tableau renvoyé.

5. Flux Java

Nous allons maintenant implémenter les mêmes conversions à l'aide de l'API Java Stream.

Tout d'abord, nous allons convertir notre chaîne de pays en un tableau de chaînes en utilisant la méthode split dans la classe String . Ensuite, nous utiliserons la classe Stream pour convertir notre tableau en une liste de chaînes:

List convertedCountriesList = Stream.of(countries.split(",", -1)) .collect(Collectors.toList());

Voyons comment convertir notre chaîne de nombres en une liste d'entiers à l'aide d'un Stream.

Encore une fois, nous allons d'abord convertir la chaîne de nombres en un tableau de chaînes à l'aide de la méthode split et convertir le tableau résultant en un Stream of String à l'aide de la méthode of () de la classe Stream .

Ensuite, nous réduirons les espaces de début et de fin de chaque chaîne du flux à l' aide de map (String :: trim) .

Ensuite, nous appliquerons map (Integer :: parseInt) sur notre flux pour convertir chaque chaîne de notre Stream en un entier .

Et enfin, nous appellerons collect (Collectors.toList ()) sur le Stream pour le convertir en une liste d'entiers:

List convertedRankList = Stream.of(ranks.split(",")) .map(String::trim) .map(Integer::parseInt) .collect(Collectors.toList());

6. Apache Commons Lang

Dans cette solution, nous utiliserons la bibliothèque Apache Commons Lang3 pour effectuer nos conversions. Apache Commons Lang3 fournit plusieurs fonctions d'assistance pour manipuler les classes Java principales.

Tout d'abord, nous allons diviser notre chaîne en un tableau de chaînes à l'aide de StringUtils.splitPreserveAllTokens . Ensuite, nous convertirons notre nouveau tableau de chaînes en une liste à l'aide de la méthode Arrays.asList :

List convertedCountriesList = Arrays.asList(StringUtils.splitPreserveAllTokens(countries, ","));

Transformons maintenant notre chaîne de nombres en une liste d'entiers.

Nous utiliserons à nouveau la méthode StringUtils.split pour créer un tableau de chaînes à partir de notre chaîne. Ensuite, nous convertirons chaque chaîne de notre nouveau tableau en un entier en utilisant Integer.parseInt et ajouterons l'entier converti à notre liste:

String[] convertedRankArray = StringUtils.split(ranks, ","); List convertedRankList = new ArrayList(); for (String number : convertedRankArray) { convertedRankList.add(Integer.parseInt(number.trim())); } 

Dans cet exemple, nous avons utilisé la splitPreserveAllTokens méthode pour diviser notre pays chaîne, alors que nous avons utilisé la scission méthode pour diviser notre rangs chaîne.

Même si ces deux fonctions divisent la chaîne en un tableau, splitPreserveAllTokens préserve tous les jetons, y compris les chaînes vides créées par des séparateurs adjacents, tandis que la méthode split ignore les chaînes vides .

Donc, si nous avons des chaînes vides que nous voulons inclure dans notre liste, nous devrions utiliser les splitPreserveAllTokens au lieu de split .

7. Goyave

Enfin, nous utiliserons la bibliothèque Guava pour convertir nos chaînes dans leurs listes appropriées.

Pour convertir notre chaîne de pays , nous appellerons d'abord Splitter.on avec une virgule comme paramètre pour spécifier le caractère sur lequel notre chaîne doit être divisée.

Then, we'll use the trimResults method on our Splitter instance. This will ignore all leading and trailing white spaces from the created substrings.

Finally, we'll use the splitToList method to split our input string and convert it to a list:

List convertedCountriesList = Splitter.on(",") .trimResults() .splitToList(countries);

Now, let's convert the string of numbers to a list of integers.

We'll again convert the string of numbers into a list of stringsusing the same process we followed above.

Then, we'll use the Lists.transform method, which accepts our list of strings as the first parameter an implementation of the Function interface as the second parameter.

L' implémentation de l'interface Function convertit chaque chaîne de notre liste en un entier:

List convertedRankList = Lists.transform(Splitter.on(",") .trimResults() .splitToList(ranks), new Function() { @Override public Integer apply(String input) { return Integer.parseInt(input.trim()); } }); 

8. Conclusion

Dans cet article, nous avons converti des chaînes séparées par des virgules en une liste de chaînes et une liste d'entiers. Cependant, nous pouvons suivre des processus similaires pour convertir une chaîne en une liste de tous les types de données primitifs.

Comme toujours, le code de cet article est disponible à l'adresse over sur Github.