Converteer een door komma's gescheiden tekenreeks naar een lijst in Java

1. Overzicht

In deze zelfstudie kijken we naar het converteren van door komma's gescheiden Draad in een Lijst van snaren. Bovendien transformeren we een door komma's gescheiden Draad van gehele getallen tot a Lijst van Gehele getallen.

2. Afhankelijkheden

Een paar van de methoden die we voor onze conversies zullen gebruiken, vereisen de Apache Commons Lang 3 en Guava-bibliotheken. Dus laten we ze toevoegen aan ons pom.xml het dossier:

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

3. Ons voorbeeld definiëren

Laten we, voordat we beginnen, twee invoerreeksen definiëren die we in onze voorbeelden zullen gebruiken. De eerste snaar, landen, bevat verschillende strings gescheiden door een komma, en de tweede string, gelederen, bevat nummers gescheiden door een komma:

Tekenreekslanden = "Rusland, Duitsland, Engeland, Frankrijk, Italië"; Stringrangen = "1,2,3,4,5,6,7";

En tijdens deze tutorial zullen we de bovenstaande strings omzetten in lijsten met strings en gehele getallen die we zullen opslaan in:

Lijst geconverteerdeCountriesList; Lijst geconverteerdeRankList;

Ten slotte, nadat we onze conversies hebben uitgevoerd, zijn de verwachte resultaten:

Lijst verwachteCountriesList = Arrays.asList ("Rusland", "Duitsland", "Engeland", "Frankrijk", "Italië"); Lijst verwachteRanksList = Arrays.asList (1, 2, 3, 4, 5, 6, 7);

4. Core Java

In onze eerste oplossing converteren we een string naar een lijst met strings en gehele getallen met behulp van core Java.

Eerst splitsen we onze string in een reeks strings met behulp van splitsen, een Draad class utility methode. Dan gebruiken we Arrays.asList op onze nieuwe reeks strings om deze om te zetten in een lijst met strings:

Lijst geconverteerdeCountriesList = Arrays.asList (landen.split (",", -1));

Laten we nu onze reeks getallen veranderen in een lijst met gehele getallen.

We gebruiken de splitsen methode om onze getallenreeks om te zetten in een reeks reeksen. Vervolgens converteren we elke string in onze nieuwe array naar een geheel getal en voegen we deze toe aan onze lijst:

String [] omgezetRankArray = ranks.split (","); Lijst geconverteerdRankList = nieuwe ArrayList (); for (String nummer: geconverteerdeRankArray) {geconverteerdeRankList.add (Integer.parseInt (number.trim ())); }

In beide gevallen gebruiken we de splitsen utility-methode van de Draad class om de door komma's gescheiden string te splitsen in een string-array.

Merk op dat de overbelast splitsen methode die wordt gebruikt om onze landen string bevat de tweede parameter limiet, waarvoor we de waarde -1 hebben opgegeven. Dit geeft aan dat het scheidingspatroon zo vaak mogelijk moet worden toegepast.

De splitsen methode die we hebben gebruikt om onze reeks gehele getallen te splitsen (gelederen) gebruikt nul als de limiet, en dus negeert het de lege strings, terwijl de splitsen gebruikt op de landen string behoudt lege strings in de geretourneerde array.

5. Java-streams

Nu zullen we dezelfde conversies implementeren met behulp van de Java Stream API.

Eerst zullen we onze landen tekenreeks in een reeks tekenreeksen met behulp van de splitsen methode in de Draad klasse. Vervolgens gebruiken we de Stroom class om onze array om te zetten in een lijst met strings:

Lijst geconverteerdCountriesList = Stream.of (landen.split (",", -1)) .collect (Collectors.toList ());

Laten we eens kijken hoe we onze reeks getallen kunnen converteren naar een lijst met gehele getallen met behulp van een Stroom.

Nogmaals, we zullen eerst de reeks getallen converteren naar een reeks reeksen met behulp van de splitsen methode en converteer de resulterende array naar een Stroom van Draad de ... gebruiken van() methode in de Stroom klasse.

Dan zullen we trim de voorloop- en volgspaties van elk Draad op de Stroom gebruik makend van map (String::bijsnijden).

Vervolgens passen we toe map (geheel getal :: parseInt) op onze stream om elke string in onze Stroom aan een Geheel getal.

En tot slot bellen we collect (Collectors.toList ()) op de Stroom om het naar een lijst met gehele getallen te converteren:

Lijst geconverteerdRankList = Stream.of (ranks.split (",")) .map (String :: trim) .map (Geheel getal :: parseInt) .collect (Collectors.toList ());

6. Apache Commons Lang

In deze oplossing gebruiken we de Apache Commons Lang3-bibliotheek om onze conversies uit te voeren. Apache Commons Lang3 biedt verschillende hulpfuncties om Java-kernklassen te manipuleren.

Eerst splitsen we onze string in een reeks strings met behulp van StringUtils.splitPreserveAllTokens. Vervolgens zullen we onze nieuwe string-array converteren naar een lijst met Arrays.asList methode:

Lijst geconverteerdCountriesList = Arrays.asList (StringUtils.splitPreserveAllTokens (landen, ","));

Laten we nu onze reeks getallen transformeren naar een lijst met gehele getallen.

We zullen opnieuw de StringUtils.split methode om een ​​reeks strings van onze string te maken. Vervolgens zetten we elke string in onze nieuwe array om in een geheel getal met Geheel getal. ParseInt en voeg het geconverteerde gehele getal toe aan onze lijst:

String [] convertRankArray = StringUtils.split (rangen, ","); Lijst geconverteerdRankList = nieuwe ArrayList (); for (String nummer: geconverteerdeRankArray) {geconverteerdeRankList.add (Integer.parseInt (number.trim ())); } 

In dit voorbeeld hebben we de splitPreserveAllTokens methode om onze landen string, terwijl we de splitsen methode om onze gelederen draad.

Ook al splitsen beide functies de string op in een array, de splitPreserveAllTokens behoudt alle tokens, inclusief de lege tekenreeksen die zijn gemaakt door aangrenzende scheidingstekens, terwijl de splitsen methode negeert de lege strings.

Dus als we lege strings hebben die we in onze lijst willen opnemen, moeten we de splitPreserveAllTokens in plaats van splitsen.

7. Guave

Ten slotte gebruiken we de Guava-bibliotheek om onze strings naar de juiste lijsten te converteren.

Om onze landen string, we zullen eerst bellen Splitter. Aan met een komma als parameter om aan te geven op welk teken onze string moet worden gesplitst.

Vervolgens gebruiken we de trimResults methode op onze Splitser voorbeeld. Hierdoor worden alle voorloop- en volgspaties van de gemaakte subtekenreeksen genegeerd.

Ten slotte gebruiken we de splitToList methode om onze invoerstring te splitsen en om te zetten in een lijst:

Lijst geconverteerdCountriesList = Splitter.on (",") .trimResults () .splitToList (landen);

Laten we nu de reeks getallen converteren naar een lijst met gehele getallen.

We zullen de reeks getallen opnieuw converteren naar een lijst met reeksenvolgens hetzelfde proces dat we hierboven hebben gevolgd.

Vervolgens gebruiken we de Lijsten.transformeren methode, die onze lijst met strings accepteert als de eerste parameter een implementatie van de Functie interface als de tweede parameter.

De Functie interface-implementatie converteert elke string in onze lijst naar een geheel getal:

Lijst geconverteerdeRankList = Lists.transform (Splitter.on (",") .trimResults () .splitToList (rangen), nieuwe functie () {@Override public Integer apply (String input) {return Integer.parseInt (input.trim () );}}); 

8. Conclusie

In dit artikel hebben we door komma's gescheiden bestanden geconverteerd Snaren in een lijst met strings en een lijst met gehele getallen. We kunnen echter vergelijkbare processen volgen om een Draad in een lijst met alle primitieve gegevenstypen.

Zoals altijd is de code uit dit artikel beschikbaar op Github.