Hoe een door komma’s gescheiden tekenreeks splitsen?

Ik heb een string met een onbekende lengte die er ongeveer zo uitziet

"dog, cat, bear, elephant, ..., giraffe"

Wat zou de optimale manier zijn om deze tekenreeks bij de komma’s te verdelen, zodat elk woord een element van een ArrayList zou kunnen worden?

Bijvoorbeeld

List<String> strings = new ArrayList<Strings>();
// Add the data here so strings.get(0) would be equal to "dog",
// strings.get(1) would be equal to "cat" and so forth.

Antwoord 1, autoriteit 100%

Je zou dit kunnen doen:

String str = "...";
List<String> elephantList = Arrays.asList(str.split(","));

In feite de .split()methode zal de string splitsen volgens (in dit geval) scheidingsteken dat je doorgeeft en zal een array van strings teruggeven.

U lijkt echter op zoek te zijn naar een lijst met tekenreeksen in plaats van een array, dus de array moet worden omgezet in een lijst met behulp van de Arrays.asList()hulpprogramma. Net als een FYI zou je ook zoiets kunnen doen:

String str = "...";
ArrayList<String> elephantList = new ArrayList<>(Arrays.asList(str.split(","));

Maar het is meestal beter om naar een interface te programmeren in plaats van naar een daadwerkelijke concrete implementatie, dus ik zou de eerste optie aanraden.


Antwoord 2, autoriteit 44%

Nou, je wilt splitsen, toch?

String animals = "dog, cat, bear, elephant, giraffe";
String[] animalsArray = animals.split(",");

Als je bovendien witruimtes rond items wilt verwijderen:

String[] animalsArray = animals.split("\\s*,\\s*");

Antwoord 3, autoriteit 9%

Je kunt het splitsen en een array maken en vervolgens toegang krijgen als array

String names = "prappo,prince";
String[] namesList = names.split(",");

je hebt toegang tot

String name1 = namesList [0];
String name2 = namesList [1];

of met lus

for(String name : namesList){
System.out.println(name);
}

ik hoop dat het je zal helpen.


Antwoord 4, autoriteit 5%

Een kleine verbetering: bovenstaande oplossingen zullen geen voorloop- of volgspaties in de eigenlijke string verwijderen. Het is beter om trim te bellen voordat je split belt.
In plaats daarvan,

String[] animalsArray = animals.split("\\s*,\\s*");

gebruik

String[] animalsArray = animals.trim().split("\\s*,\\s*");

Antwoord 5

Eerst kun je namen op deze manier splitsen

String animals = "dog, cat, bear, elephant,giraffe";
String animals_list[] = animals.split(",");

om toegang te krijgen tot uw dieren

String animal1 = animals_list[0];
String animal2 = animals_list[1];
String animal3 = animals_list[2];
String animal4 = animals_list[3];

En u wilt ook spaties en komma’s rond dierennamen verwijderen

String animals_list[] = animals.split("\\s*,\\s*");

Antwoord 6

Voor de volledigheid: gebruik de bibliotheek Guava: Splitter.on(",").split(“dog,cat,fox”)

Nog een voorbeeld:

String animals = "dog,cat, bear,elephant , giraffe ,  zebra  ,walrus";
List<String> l = Lists.newArrayList(Splitter.on(",").trimResults().split(animals));
// -> [dog, cat, bear, elephant, giraffe, zebra, walrus]

Splitter.split()retourneert een Iterable, dus als je een lijst nodig hebt, verpak deze dan in Lists.newArrayList()zoals hierboven. Ga anders gewoon met de Iterable, bijvoorbeeld:

for (String animal : Splitter.on(",").trimResults().split(animals)) {
    // ...
}

Merk op hoe trimResults()al uw trimbehoeften afhandelt zonder dat u regexen voor hoekgevallen hoeft te tweaken, zoals bij String.split().

Als uw project al Guava gebruikt, zou dit uw voorkeursoplossing moeten zijn. Zie de Splitter-documentatie in de Guava-gebruikershandleidingof de javadocsvoor meer configuratie-opties.


Antwoord 7

Kan proberen hiermee werkte voor mij

sg = sg.replaceAll(", $", "");

of anders

if (sg.endsWith(",")) {
                    sg = sg.substring(0, sg.length() - 1);
                }

Antwoord 8

voeg in build.gradle Guava toe

   compile group: 'com.google.guava', name: 'guava', version: '27.0-jre'

en dan

   public static List<String> splitByComma(String str) {
    Iterable<String> split = Splitter.on(",")
            .omitEmptyStrings()
            .trimResults()
            .split(str);
    return Lists.newArrayList(split);
    }
    public static String joinWithComma(Set<String> words) {
        return Joiner.on(", ").skipNulls().join(words);
    }

genieten 🙂


Antwoord 9

Verwijder alle spaties en maak een vasteof onveranderlijkelijst (zie asListAPI-documenten)

final String str = "dog, cat, bear, elephant, ..., giraffe";
List<String> list = Arrays.asList(str.replaceAll("\\s", "").split(","));
// result: [dog, cat, bear, elephant, ..., giraffe]

Het is mogelijk om ook replaceAll(\\s+", "")te gebruiken, maar de maximale efficiëntie hangt af van de gebruikssituatie (zie @GurselKoca antwoordop Witruimte verwijderen uit strings in Java)


Antwoord 10

Je kunt zoiets als dit gebruiken:

String animals = "dog, cat, bear, elephant, giraffe";
List<String> animalList = Arrays.asList(animals.split(","));

U zou ook de bibliotheken opnemen:

import java.util.ArrayList;
import java.util.Arrays; 
import java.util.List;

Antwoord 11

Gebruik dit:

       List<String> splitString = (List<String>) Arrays.asList(jobtype.split(","));

Antwoord 12

In Kotlin,

val stringArray = commasString.replace(", ", ",").split(",")

waar stringArrayList<String>is en commasStringStringmet komma’s en spaties


Antwoord 13

Dit is een makkelijke manier om een tekenreeks per komma te splitsen,

import java.util.*;
public class SeparatedByComma{
public static void main(String []args){
     String listOfStates = "Hasalak, Mahiyanganaya, Dambarawa, Colombo";
     List<String> stateList = Arrays.asList(listOfStates.split("\\,"));
     System.out.println(stateList);
 }
}

Antwoord 14

Er is een functie genaamd replaceAll()die alle spaties kan verwijderen door ze te vervangen door wat je maar wilt. Als voorbeeld

String str="  15. 9 4;16.0 1"
String firstAndSecond[]=str.replaceAll("\\s","").split(";");
System.out.println("First:"+firstAndSecond[0]+", Second:"+firstAndSecond[1]);

geeft je:

First:15.94, Second:16.01

Other episodes