Konverter en komma-adskilt streng til en liste i Java

1. Oversigt

I denne vejledning ser vi på konvertering af et komma-adskilt Snor ind i en Liste af strenge. Derudover transformerer vi et komma-adskilt Snor af heltal til a Liste af Heltal.

2. Afhængigheder

Et par af de metoder, som vi bruger til vores konverteringer, kræver bibliotekerne Apache Commons Lang 3 og Guava. Så lad os tilføje dem til vores pom.xml fil:

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

3. Definition af vores eksempel

Før vi begynder, lad os definere to inputstrenge, som vi bruger i vores eksempler. Den første streng, lande, indeholder flere strenge adskilt af komma, og den anden streng, rækker, inkluderer tal adskilt med komma:

String-lande = "Rusland, Tyskland, England, Frankrig, Italien"; Strengranger = "1,2,3,4,5,6,7";

Og gennem denne tutorial konverterer vi ovenstående strenge til lister over strenge og heltal, som vi gemmer i:

Liste convertCountriesList; Liste convertRankList;

Endelig, efter at vi har udført vores konverteringer, vil de forventede output være:

Liste forventetCountriesList = Arrays.asList ("Rusland", "Tyskland", "England", "Frankrig", "Italien"); Liste forventetRanksList = Arrays.asList (1, 2, 3, 4, 5, 6, 7);

4. Core Java

I vores første løsning konverterer vi en streng til en liste over strenge og heltal ved hjælp af core Java.

Først deler vi vores streng i en række strenge ved hjælp af dele, -en Snor klasseværktøjsmetode. Så bruger vi Arrays.asList på vores nye række strenge for at konvertere det til en liste over strenge:

Liste convertCountriesList = Arrays.asList (lands.split (",", -1));

Lad os nu dreje vores talstreng til en liste over heltal.

Vi bruger dele metode til at konvertere vores talestreng til en række strenge. Derefter konverterer vi hver streng i vores nye array til et heltal og føjer den til vores liste:

Streng [] convertRankArray = ranks.split (","); Liste convertRankList = ny ArrayList (); for (String nummer: convertRankArray) {convertRankList.add (Integer.parseInt (number.trim ())); }

I begge disse tilfælde bruger vi dele hjælpemetode fra Snor klasse for at opdele den komma-adskilte streng i en streng array.

Bemærk, at den overbelastede dele metode, der bruges til at konvertere vores lande streng indeholder den anden parameter begrænse, for hvilken vi angav værdien som -1. Dette specificerer, at skillemønsteret skal anvendes så mange gange som muligt.

Det dele metode, vi brugte til at opdele vores streng af heltal (rækker) bruger nul som begrænse, og således ignorerer den de tomme strenge, mens dele bruges på lande streng bevarer tomme strenge i det returnerede array.

5. Java Streams

Nu implementerer vi de samme konverteringer ved hjælp af Java Stream API.

Først konverterer vi vores lande streng i en række strenge ved hjælp af dele metode i Snor klasse. Derefter bruger vi Strøm klasse for at konvertere vores array til en liste over strenge:

Liste convertCountriesList = Stream.of (lands.split (",", -1)) .collect (Collectors.toList ());

Lad os se, hvordan vi konverterer vores talstreng til en liste over heltal ved hjælp af a Strøm.

Igen konverterer vi først talstrengen til en række strenge ved hjælp af dele metode og konvertere den resulterende matrix til en Strøm af Snor bruger af() metode i Strøm klasse.

Så gør vi det trimme de forreste og bageste mellemrum fra hver Snor på den Strøm ved brug af kort (streng::trimme).

Dernæst ansøger vi kort (Heltal :: parseInt) på vores stream for at konvertere hver streng i vores Strøm til en Heltal.

Og til sidst ringer vi indsamle (Collectors.toList ()) på den Strøm at konvertere det til en heltalsliste:

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

6. Apache Commons Lang

I denne løsning bruger vi Apache Commons Lang3-biblioteket til at udføre vores konverteringer. Apache Commons Lang3 leverer flere hjælperfunktioner til at manipulere Java-klasser.

Først deler vi vores streng i en række strenge ved hjælp af StringUtils.splitPreserveAllTokens. Derefter konverterer vi vores nye strengarray til en liste ved hjælp af Arrays.asList metode:

Liste convertCountriesList = Arrays.asList (StringUtils.splitPreserveAllTokens (lande, ","));

Lad os nu omdanne vores talstreng til en liste over heltal.

Vi bruger igen StringUtils.split metode til at oprette en række strenge fra vores streng. Derefter konverterer vi hver streng i vores nye array til et heltal ved hjælp af Heltal. ParseInt og tilføj det konverterede heltal til vores liste:

String [] convertRankArray = StringUtils.split (rangerer, ","); Liste convertRankList = ny ArrayList (); for (String nummer: convertRankArray) {convertRankList.add (Integer.parseInt (number.trim ())); } 

I dette eksempel brugte vi splitPreserveAllTokens metode til at opdele vores lande streng, mens vi brugte dele metode til at opdele vores rækker snor.

Selvom begge disse funktioner opdeler strengen i en matrix, er splitPreserveAllTokens bevarer alle tokens inklusive de tomme strenge oprettet af tilstødende separatorer, mens dele metode ignorerer de tomme strenge.

Så hvis vi har tomme strenge, som vi vil have med på vores liste, så skal vi bruge splitPreserveAllTokens i stedet for dele.

7. Guava

Endelig bruger vi Guava-biblioteket til at konvertere vores strenge til deres passende lister.

At konvertere vores lande streng, vi ringer først Splitter. På med komma som parameter for at specificere hvilket tegn vores streng skal deles på.

Derefter bruger vi trimResultater metode på vores Splitter eksempel. Dette ignorerer alle ledende og bageste hvide mellemrum fra de oprettede underlag.

Endelig bruger vi splitToList metode til at opdele vores inputstreng og konvertere den til en liste:

Liste convertCountriesList = Splitter.on (",") .trimResults () .splitToList (lande);

Lad os nu konvertere talstrengen til en liste over heltal.

Vi konverterer igen talstrengen til en liste over strengeved hjælp af den samme proces, som vi fulgte ovenfor.

Derefter bruger vi Lister.transformere metode, som accepterer vores liste over strenge som den første parameter til implementering af Fungere interface som den anden parameter.

Det Fungere interface implementering konverterer hver streng på vores liste til et heltal:

Liste convertRankList = Lists.transform (Splitter.on (",") .trimResults () .splitToList (rangerer), ny funktion () {@ Override public Integer gælder (String input) {return Integer.parseInt (input.trim () );}}); 

8. Konklusion

I denne artikel konverterede vi kommasepareret Strenge i en liste over strenge og en liste over heltal. Vi kan dog følge lignende processer for at konvertere en Snor i en liste over primitive datatyper.

Som altid er koden fra denne artikel tilgængelig på Github.