web-dev-qa-db-fra.com

Comment diviser une chaîne séparée par des virgules?

J'ai une chaîne d'une longueur inconnue qui ressemble à ceci

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

Quel serait le moyen optimal de diviser cette chaîne par des virgules pour que chaque mot puisse devenir un élément d'une liste de tableaux?

Par exemple

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.
173
James Fazio

Vous pourriez faire ceci:

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

Fondamentalement, la méthode .split() divisera la chaîne en fonction du délimiteur (dans ce cas) que vous passez et renverra un tableau de chaînes. 

Cependant, vous semblez vouloir une liste de chaînes plutôt qu'un tableau, vous devez donc transformer le tableau en liste à l'aide de l'utilitaire Arrays.asList() . En tant que FYI, vous pouvez également faire quelque chose comme ceci:

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

Mais il est généralement préférable de programmer pour une interface plutôt que pour une implémentation concrète réelle, je recommanderais donc la première option.

297
npinti

Eh bien, vous voulez divisez , non?

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

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

Si vous souhaitez également supprimer les espaces entre les éléments:

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

Vous pouvez le scinder et faire un tableau puis accéder comme tableau

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

vous pouvez accéder comme 

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

ou en utilisant la boucle 

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

espérons que cela vous aidera.

19
Prappo Prince

Une petite amélioration: les solutions ci-dessus ne suppriment pas les espaces de début ou de fin dans la chaîne réelle. Il vaut mieux appeler trim avant d'appeler split . Au lieu de cela,

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

utilisation

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

D'abord, vous pouvez diviser des noms comme celui-ci

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

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

accéder à vos animaux 

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

Et aussi vous voulez supprimer les espaces blancs et les virgules autour des noms d'animaux

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

Pour être complet, en utilisant la bibliothèque Guava , vous feriez: Splitter.on(",").split(“dog,cat,fox”)

Un autre exemple:

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() renvoie un Iterable, donc si vous avez besoin d’une liste, placez-la dans Lists.newArrayList() comme ci-dessus. Sinon, allez simplement avec l'Iterable, par exemple: 

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

Notez que trimResults() répond à tous vos besoins de découpage sans avoir à Tweak regexes pour les angles , comme avec String.split().

Si votre projet utilise déjà Guava, cela devrait être votre solution préférée. Consultez la documentation de Splitter dans Guava User Guide ou javadocs pour plus d'options de configuration.

3
Jonik

Peut essayer avec cela a fonctionné pour moi 

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

ou sinon 

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

Supprimez tous les espaces et créez une liste à taille fixe ou immuable (voir asListdocuments d'API )

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

Il est également possible d'utiliser replaceAll(\\s+", "") mais l'efficacité maximale dépend du cas d'utilisation. (voir @GurselKoca réponse à Suppression des espaces des chaînes en Java)

0
sdc

À Kotlin,

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

stringArray est List<String> et commasString est String avec des virgules et des espaces

0
KishanSolanki124

dans build.gradle, ajoutez Guava 

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

et alors

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

prendre plaisir :)

0
panayot_kulchev_bg

Utilisez ceci :

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

Vous pouvez utiliser quelque chose comme ceci: 

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

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

En outre, vous incluez les bibliothèques:

import Java.util.ArrayList;
import Java.util.Arrays; 
import Java.util.List;
0
Diego Cortes