J'ai une chaîne de longueur inconnue qui ressemble à ceci
"dog, cat, bear, elephant, ..., giraffe"
Quelle serait la meilleure façon de diviser cette chaîne au niveau des virgules afin que chaque mot puisse devenir un élément d'une ArrayList?
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.
Réponses:
Vous pouvez faire ceci:
Fondamentalement, la
.split()
méthode divisera la chaîne en fonction (dans ce cas) du délimiteur que vous passez et renverra un tableau de chaînes.Cependant, vous semblez rechercher une liste de chaînes plutôt qu'un tableau, donc le tableau doit être transformé en liste à l'aide de l'
Arrays.asList()
utilitaire. Tout comme un info, vous pouvez également faire quelque chose comme ça:Mais il est généralement préférable de programmer sur une interface plutôt que sur une implémentation concrète réelle, donc je recommanderais la 1ère option.
la source
str.split
accepte l'expression régulière afin que vous puissiez l'utiliserstr.split(",[ ]*");
pour supprimer les virgules et les espaces après les virgules.ArrayList<String>
.Eh bien, vous voulez vous séparer , non?
Si vous souhaitez également vous débarrasser des espaces autour des éléments:
la source
Arrays.asList()
idiome.Vous pouvez le diviser et créer un tableau puis accéder comme un tableau
vous pouvez accéder comme
ou en utilisant une boucle
j'espère que cela vous aidera.
la source
Une petite amélioration: les solutions ci-dessus ne supprimeront 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,
utilisation
la source
("\\s*,\\s*")
suffit d'utiliser(",");
cela donnera les mêmes résultats.trim(" string, with , space ")
sera ainsi"string, with , space"
."dog, cat, bear, elephant, giraffe"
alors pas besoin detrim()
et dans le cas où si l'utilisationtrim()
alors sortie ne sera"string,with,space"
pas celle-ci"string, with , space"
trim()
supprimera tous les espaces, pas seulement les espaces gauche et droit de la chaîne" string, with , space ".trim()
retour"string, with , space"
. Comme le dit javadoc: renvoie une copie de la chaîne, avec les espaces de début et de fin omis. Vous vous trompez et @ user872858 a raison.Vous pouvez d'abord diviser des noms comme celui-ci
accéder à vos animaux
Et vous souhaitez également supprimer les espaces blancs et les virgules autour des noms d'animaux
la source
Pour être complet, en utilisant la bibliothèque Guava , vous feriez:
Splitter.on(",").split(“dog,cat,fox”)
Un autre exemple:
Splitter.split()
renvoie un Iterable, donc si vous avez besoin d'une liste, enveloppez-laLists.newArrayList()
comme ci-dessus. Sinon, allez simplement avec l'itérable, par exemple:Notez comment
trimResults()
gère tous vos besoins de découpe sans avoir à modifier les regex pour les caisses d'angle , comme avecString.split()
.Si votre projet utilise déjà la goyave, cela devrait être votre solution préférée. Voir la documentation Splitter dans le Guide de l'utilisateur de Guava ou les javadocs pour plus d'options de configuration.
la source
Peut essayer avec cela a fonctionné pour moi
ou sinon
la source
dans build.gradle ajouter Guava
puis
prendre plaisir :)
la source
Supprimez tous les espaces blancs et créez une liste de taille fixe ou immuable (voir la
asList
documentation de l'API )Il est possible d'utiliser également
replaceAll(\\s+", "")
mais l'efficacité maximale dépend du cas d'utilisation. (voir la réponse de @GurselKoca à Supprimer les espaces blancs des chaînes en Java )la source
Vous pouvez utiliser quelque chose comme ceci:
En outre, vous incluriez les bibliothèques:
la source
Utilisez ceci :
la source
À Kotlin,
où
stringArray
estList<String>
etcommasString
estString
avec des virgules et des espacesla source
Ceci est un moyen facile de diviser la chaîne par une virgule,
la source
Il existe une fonction appelée
replaceAll()
qui peut supprimer tous les espaces blancs en les remplaçant par ce que vous voulez. Par exemplete donnera:
la source