Konverter en kommaseparert streng til en liste i Java

1. Oversikt

I denne opplæringen vil vi se på konvertering av komma-separert String inn i en Liste av strenger. I tillegg transformerer vi et komma-skilt String av heltall til a Liste av Heltall.

2. Avhengigheter

Noen av metodene vi bruker for konvertering krever Apache Commons Lang 3 og Guava biblioteker. Så la oss legge dem til vår pom.xml fil:

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

3. Definere vårt eksempel

Før vi begynner, la oss definere to inngangsstrenger som vi bruker i eksemplene våre. Den første strengen, land, inneholder flere strenger atskilt med komma, og den andre strengen, rangerer, inkluderer tall atskilt med komma:

Strengland = "Russland, Tyskland, England, Frankrike, Italia"; Strengranger = "1,2,3,4,5,6,7";

Og gjennom denne opplæringen vil vi konvertere strengene ovenfor til lister over strenger og heltall som vi vil lagre i:

Liste convertCountriesList; Liste convertRankList;

Til slutt, etter at vi har utført konverteringer, vil de forventede resultatene være:

Liste expectCountriesList = Arrays.asList ("Russland", "Tyskland", "England", "Frankrike", "Italia"); Liste expectRanksList = Arrays.asList (1, 2, 3, 4, 5, 6, 7);

4. Core Java

I vår første løsning konverterer vi en streng til en liste over strenger og heltall ved hjelp av kjernen Java.

Først deler vi strengen vår i en rekke strenger ved hjelp av dele, en String klasse verktøymetode. Så bruker vi Arrays.asList på vårt nye utvalg av strenger for å konvertere det til en liste over strenger:

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

La oss nå slå vår tallstreng til en liste over heltall.

Vi bruker dele metode for å konvertere tallstrengen vår til en rekke strenger. Deretter konverterer vi hver streng i den nye matrisen til et helt tall og legger den til i listen vår:

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

I begge disse tilfellene bruker vi dele verktøymetode fra String klasse for å dele den kommaseparerte strengen i en strengoppstilling.

Merk at overbelastet dele metoden som brukes til å konvertere vår land strengen inneholder den andre parameteren grense, som vi ga verdien som -1. Dette spesifiserer at skillemønsteret skal brukes så mange ganger som mulig.

De dele metoden vi brukte til å dele vår streng med heltall (rangerer) bruker null som grense, og slik ignorerer den de tomme strengene, mens dele brukt på land streng beholder tomme strenger i den returnerte matrisen.

5. Java Streams

Nå implementerer vi de samme konverteringene ved hjelp av Java Stream API.

Først konverterer vi vår land streng i en rekke strenger ved hjelp av dele metoden i String klasse. Så bruker vi Strøm klasse for å konvertere matrisen vår til en liste over strenger:

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

La oss se hvordan vi konverterer tallstrengen vår til en liste over heltall ved hjelp av a Strøm.

Igjen konverterer vi først tallstrengen til en rekke strenger ved hjelp av dele metode og konvertere den resulterende matrisen til en Strøm av String bruker av() metoden i Strøm klasse.

Så skal vi trimme de ledende og etterfølgende mellomrom fra hver StringStrøm ved hjelp av kart (streng::listverk).

Deretter søker vi kart (Heltall :: parseInt) på strømmen vår for å konvertere hver streng i vår Strøm til en Heltall.

Og til slutt, vi ringer samle (Collectors.toList ())Strøm for å konvertere den til en heltalliste:

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

6. Apache Commons Lang

I denne løsningen bruker vi Apache Commons Lang3-biblioteket til å utføre konverteringene våre. Apache Commons Lang3 har flere hjelperfunksjoner for å manipulere Java-klasser.

Først deler vi strengen vår i en rekke strenger ved hjelp av StringUtils.splitPreserveAllTokens. Deretter konverterer vi den nye strengmatrisen til en liste ved hjelp av Arrays.asList metode:

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

La oss nå forvandle tallstrengen vår til en liste over heltall.

Vi bruker igjen StringUtils.split metode for å lage en rekke strenger fra strengen vår. Deretter konverterer vi hver streng i den nye matrisen til et heltall ved hjelp av Heltall.parseInt og legg det konverterte heltallet til listen vår:

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

I dette eksemplet brukte vi splitPreserveAllTokens metode for å dele vår land streng, mens vi brukte dele metode for å dele vår rangerer streng.

Selv om begge disse funksjonene deler strengen i en matrise, vil splitPreserveAllTokens bevarer alle tokens inkludert de tomme strengene opprettet av tilstøtende skilletegn, mens dele metoden ignorerer de tomme strengene.

Så hvis vi har tomme strenger som vi ønsker å være med på listen vår, bør vi bruke splitPreserveAllTokens i stedet for dele.

7. Guava

Til slutt bruker vi Guava-biblioteket til å konvertere strengene våre til de aktuelle listene.

For å konvertere vår land streng, vi ringer først Splitter. På med komma som parameter for å spesifisere hvilket tegn strengen vår skal deles på.

Så bruker vi trimResultater metode på vår Splitter forekomst. Dette vil ignorere alle ledende og etterfølgende hvite mellomrom fra de opprettede understrengene.

Til slutt bruker vi splitToList metode for å dele inngangsstrengen vår og konvertere den til en liste:

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

La oss nå konvertere tallstrengen til en liste over heltall.

Vi konverterer igjen tallstrengen til en liste over strengerved å bruke den samme prosessen som vi fulgte ovenfor.

Så bruker vi Lister.forvandle metoden, som aksepterer vår liste over strenger som den første parameteren en implementering av Funksjon grensesnitt som den andre parameteren.

De Funksjon grensesnittimplementering konverterer hver streng i listen vår til et helt tall:

Liste convertRankList = Lists.transform (Splitter.on (",") .trimResults () .splitToList (rangerer), ny funksjon () {@ Override public Integer gjelder (strenginngang) {return Integer.parseInt (input.trim () );}}); 

8. Konklusjon

I denne artikkelen konverterte vi kommaseparert Strenger inn i en liste over strenger og en liste over heltall. Imidlertid kan vi følge lignende prosesser for å konvertere en String inn i en liste over primitive datatyper.

Som alltid er koden fra denne artikkelen tilgjengelig på Github.


$config[zx-auto] not found$config[zx-overlay] not found