Converti una stringa separata da virgole in un elenco in Java

1. Panoramica

In questo tutorial vedremo come convertire una stringa separata da virgole in un elenco di stringhe. Inoltre, trasformeremo una stringa di numeri interi separati da virgole in un elenco di numeri interi .

2. Dipendenze

Alcuni dei metodi che utilizzeremo per le nostre conversioni richiedono le librerie Apache Commons Lang 3 e Guava. Quindi, aggiungiamoli al nostro file pom.xml :

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

3. Definire il nostro esempio

Prima di iniziare, definiamo due stringhe di input che useremo nei nostri esempi. La prima stringa, paesi, contiene diverse stringhe separate da una virgola e la seconda stringa, ranghi, include numeri separati da una virgola:

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

E, durante questo tutorial, convertiremo le stringhe precedenti in elenchi di stringhe e numeri interi che memorizzeremo in:

List convertedCountriesList; List convertedRankList;

Infine, dopo aver eseguito le nostre conversioni, gli output attesi saranno:

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

4. Core Java

Nella nostra prima soluzione, convertiremo una stringa in un elenco di stringhe e numeri interi utilizzando Java core.

Per prima cosa, suddivideremo la nostra stringa in un array di stringhe usando split, un metodo di utilità della classe String . Quindi, useremo Arrays.asList sul nostro nuovo array di stringhe per convertirlo in un elenco di stringhe:

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

Trasformiamo ora la nostra stringa di numeri in un elenco di numeri interi.

Useremo il metodo split per convertire la nostra stringa numerica in un array di stringhe. Quindi, convertiremo ogni stringa nel nostro nuovo array in un numero intero e lo aggiungeremo al nostro elenco :

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

In entrambi i casi, utilizziamo il metodo di utilità split della classe String per dividere la stringa separata da virgole in un array di stringhe.

Si noti che il metodo di suddivisione sovraccaricato utilizzato per convertire la stringa dei nostri paesi contiene il secondo limite di parametri , per il quale abbiamo fornito il valore -1. Ciò specifica che il modello di separazione deve essere applicato il maggior numero di volte possibile.

Il metodo split che abbiamo usato per dividere la nostra stringa di numeri interi ( ranghi ) usa zero come limite , quindi ignora le stringhe vuote, mentre lo split usato sulla stringa dei paesi mantiene le stringhe vuote nell'array restituito.

5. Java Streams

Ora implementeremo le stesse conversioni utilizzando l'API Java Stream.

Innanzitutto, convertiremo la stringa dei nostri paesi in un array di stringhe utilizzando il metodo split nella classe String . Quindi, useremo la classe Stream per convertire il nostro array in un elenco di stringhe:

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

Vediamo come convertire la nostra stringa di numeri in un elenco di numeri interi utilizzando uno Stream.

Ancora una volta, convertiremo prima la stringa di numeri in un array di stringhe usando il metodo split e convertiremo l'array risultante in uno Stream of String usando il metodo of () nella classe Stream .

Quindi, taglieremo gli spazi iniziali e finali da ogni stringa sullo stream usando map (String :: trim) .

Successivamente, applicheremo map (Integer :: parseInt) sul nostro stream per convertire ogni stringa nel nostro Stream in un Integer .

E infine, chiameremo collect (Collectors.toList ()) sullo Stream per convertirlo in un elenco di numeri interi:

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

6. Apache Commons Lang

In questa soluzione, useremo la libreria Apache Commons Lang3 per eseguire le nostre conversioni. Apache Commons Lang3 fornisce diverse funzioni di supporto per manipolare le classi Java principali.

First, we'll split our string into an array of strings using StringUtils.splitPreserveAllTokens. Then, we'll convert our new string array into a list using Arrays.asList method:

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

Let's now transform our string of numbers to a list of integers.

We'll again use the StringUtils.split method to create an array of strings from our string. Then, we'll convert each string in our new array into an integer using Integer.parseInt and add the converted integer to our list:

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

In this example, we used the splitPreserveAllTokens method to split our countries string, whereas we used the split method to split our ranks string.

Even though both these functions split the string into an array, the splitPreserveAllTokens preserves all tokens including the empty strings created by adjoining separators, while the split method ignores the empty strings.

So, if we have empty strings that we want to be included in our list, then we should use the splitPreserveAllTokens instead of split.

7. Guava

Finally, we'll use the Guava library to convert our strings to their appropriate lists.

To convert our countries string, we'll first call Splitter.on with a comma as the parameter to specify what character our string should be split on.

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' implementazione dell'interfaccia Function converte ogni stringa nel nostro elenco in un numero intero:

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

8. Conclusione

In questo articolo, abbiamo convertito le stringhe separate da virgole in un elenco di stringhe e un elenco di numeri interi. Tuttavia, possiamo seguire processi simili per convertire una stringa in un elenco di qualsiasi tipo di dati primitivo.

Come sempre, il codice di questo articolo è disponibile su Github.