Come dividere una stringa separata da virgola?


202

Ho una stringa di lunghezza sconosciuta che assomiglia a questa

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

Quale sarebbe il modo ottimale di dividere questa stringa tra le virgole in modo che ogni parola possa diventare un elemento di una matrice?

Per esempio

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.

1
usa il metodo split ("splitting char") che divide il tuo metodo string nad creerà un array di stringhe con parole divise.
Simon Dorociak,

Risposte:


343

Potresti farlo:

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

Fondamentalmente il .split()metodo dividerà la stringa in base al delimitatore (in questo caso) che stai passando e restituirà una matrice di stringhe.

Tuttavia, sembra che tu stia cercando un Elenco di stringhe anziché un array, quindi l'array deve essere trasformato in un elenco utilizzando l' Arrays.asList()utilità. Proprio come un FYI potresti anche fare qualcosa del genere:

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

Ma di solito è meglio programmare su un'interfaccia piuttosto che su una reale implementazione concreta, quindi consiglierei la prima opzione.


9
Tieni presente che questo non taglierà i valori, quindi strings.get (1) sarà "cat" non "cat"
Alb

45
str.splitaccetta regex in modo da poterlo utilizzare in str.split(",[ ]*");modo da rimuovere le virgole e gli spazi dopo le virgole.
vertti

4
Un file delimitato da virgole (csv) potrebbe avere una virgola tra virgolette, il che significa che non è un delimitatore. In questo caso, Split non funzionerà.
Steven Trigg

2
La seconda opzione richiede il cast di ArrayList<String>.
C_B,

3
Se è necessario mantenere voci vuote (ad es. Per una lunghezza dell'array costante), utilizzare split (",", - 1) secondo stackoverflow.com/questions/14602062/…
Fast Engy

157

Bene, vuoi dividere , giusto?

String animals = "dog, cat, bear, elephant, giraffe";

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

Se desideri inoltre eliminare gli spazi bianchi attorno agli oggetti:

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

Sì, fa parte della soluzione. L'OP sembra seguire un Elenco di stringhe, non un array.
npinti,

@npinti: sì, +1 per te, eri più veloce e non volevo copiare il tuo Arrays.asList()linguaggio.
Tomasz Nurkiewicz,

1
Ho continuato a pensare per 10 ore, poi ho cercato SO. non sapevo che è così facile .split ();
DeathRs

Cosa succede se si desidera archiviare gli elementi suddivisi risultanti in un set anziché in un array?
Moses Kirathe,

29

Puoi dividerlo e creare un array quindi accedere come array

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

puoi accedere come

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

o usando il loop

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

spero che ti possa aiutare.


18

Un piccolo miglioramento: le soluzioni precedenti non rimuoveranno gli spazi iniziali o finali nella stringa effettiva. È meglio chiamare trim prima di chiamare split. Invece di questo,

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

uso

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

1
per la tua seconda linea, se usiamo trim () allora non abbiamo bisogno di dividere lo spazio come ("\\s*,\\s*")solo usare (",");questo risulterà uguale.
WIZARD,

5
Non sono sicuro di questo @WIZARD perché il trim rimuove solo lo spazio sinistro e destro della stringa, ma non lo spazio all'interno. Quindi lo trim(" string, with , space ")sarà "string, with , space".
Thomas Leduc,

@ThomasLeduc se la stringa è come questa, "dog, cat, bear, elephant, giraffe"non è necessario trim()e, nel caso in cui l'uso, trim()allora out put "string,with,space"non sarà questo"string, with , space"
WIZARD

trim()rimuoverà tutti gli spazi non solo lo spazio sinistro e destro della stringa
WIZARD,

5
Lo provi? perché ho appena scritto un programma java e la stringa " string, with , space ".trim()restituita "string, with , space". Come dice javadoc: restituisce una copia della stringa, con spazi bianchi iniziali e finali omessi. Ti sbagli e @ user872858 ha ragione.
Thomas Leduc,

3

Per prima cosa puoi dividere i nomi in questo modo

String animals = "dog, cat, bear, elephant,giraffe";

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

per accedere ai tuoi animali

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

E anche tu vuoi rimuovere gli spazi bianchi e la virgola attorno ai nomi degli animali

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

3

Per completezza, usando la libreria Guava , faresti: Splitter.on(",").split(“dog,cat,fox”)

Un altro esempio:

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()restituisce un Iterable, quindi se hai bisogno di un Elenco, includilo Lists.newArrayList()come sopra. Altrimenti basta andare con Iterable, ad esempio:

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

Nota come trimResults()gestisce tutte le tue esigenze di rifilatura senza dover modificare le regex per i casi angolari , come con String.split().

Se il tuo progetto utilizza già Guava, questa dovrebbe essere la tua soluzione preferita. Consulta la documentazione di Splitter nella Guida dell'utente di Guava o nei javadocs per ulteriori opzioni di configurazione.


2

Posso provare con questo ha funzionato per me

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

o altro

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

1

in build.gradle aggiungi Guava

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

e poi

    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);
    }

godere :)


0

Rimuovi tutti gli spazi bianchi e crea un Elenco di dimensioni fisse o immutabili (Vedi i asList documenti API )

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

È anche possibile utilizzare, replaceAll(\\s+", "")ma la massima efficienza dipende dal caso d'uso. (vedi la risposta di @GurselKoca alla rimozione di spazi bianchi dalle stringhe in Java )


0

Puoi usare qualcosa del genere:

String animals = "dog, cat, bear, elephant, giraffe";

List<String> animalList = Arrays.asList(animals.split(","));

Inoltre, dovresti includere le librerie:

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

0

Usa questo :

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

0

A Kotlin,

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

dove stringArrayè List<String>ed commasStringè Stringcon virgole e spazi


0

Questo è un modo semplice per dividere la stringa per virgola,

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);
 }
}

Questo codice che ho usato per JDK. E se è necessario stampare l'array. usa System.out.println
Sandun Susantha il

-1

C'è una funzione chiamata replaceAll()che può rimuovere tutti gli spazi bianchi sostituendoli con quello che vuoi. Come esempio

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

ti darà:

First:15.94, Second:16.01
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.