Existe-t-il une méthode intégrée en Java qui nous permet de convertir une chaîne séparée par des virgules en un conteneur (par exemple un tableau, une liste ou un vecteur)? Ou dois-je écrire du code personnalisé pour cela?
String commaSeparated = "item1 , item2 , item3";
ArrayList<String> items = //method that converts above string into list??
java
string
collections
split
Jame
la source
la source
Réponses:
Convertir une chaîne séparée par des virgules en liste
Le code ci-dessus divise la chaîne sur un délimiteur défini comme:
zero or more whitespace, a literal comma, zero or more whitespace
qui placera les mots dans la liste et réduira tout espace entre les mots et les virgules.Veuillez noter que cela renvoie simplement un wrapper sur un tableau: vous NE POUVEZ PAS par exemple à
.remove()
partir du résultatList
. Pour un réel,ArrayList
vous devez continuer à utilisernew ArrayList<String>
.la source
\s
correspond à n'importe quel espace blanc, le*
applique la correspondance zéro fois ou plus. Signifie donc\s*
"correspondre à n'importe quel espace blanc zéro ou plusieurs fois". Nous recherchons cela avant et après la virgule. Par conséquent, le fractionnement fonctionnera pour les chaînes comme"item1 , item2 , item3"
, ou"item1,item2 ,item3"
, etc. En Java, vous devez échapper à la barre oblique inverse dans les chaînes, donc vous obtenez\\s*
"[\\s,]+"
pour couper les espaces blancs pour les valeurs. Par exemple," item1 , item2 , item3 , "
devient["item1", "item2", "item3"]
."[\\s,]+"
se divisera également sur l'espace interne au sein d'un jeton séparé par des virgules, il traitera les deux espaces comme un délimiteur même lorsqu'aucune virgule n'est présente, au lieu d'une virgule plus n'importe quel nombre d'espaces environnants."\\s*(,\\s*)+"
supprimera les espaces uniquement autour des jetons séparés par des virgules et ignorera également les chaînes qui ne sont que des espaces ou vides.Arrays.asList
renvoie une taille fixeList
soutenue par le tableau. Si vous voulez un mutable normal,java.util.ArrayList
vous devez le faire:Ou, en utilisant la goyave :
L'utilisation de a
Splitter
vous donne plus de flexibilité dans la façon dont vous fractionnez la chaîne et vous permet, par exemple, d'ignorer les chaînes vides dans les résultats et de couper les résultats. Il a également un comportement moins étrange queString.split
de ne pas vous obliger à diviser par regex (ce n'est qu'une option).la source
Arrays.asList
fournit un wrapper autour du tableau natif (en évitant une copie d'élément), lenew ArrayList(...)
fera exactement une telle copie élément par élément. Nous devrions probablement préférer une approche qui permet aux éléments analysés d'être directement ajoutés à la collection cible souhaitée.Deux étapes:
String [] items = commaSeparated.split("\\s*,\\s*");
List<String> container = Arrays.asList(items);
la source
split
est interprété comme un RegEx.En voici un autre pour convertir CSV en ArrayList:
Vous imprime
la source
Si a
List
est l'objectif final comme l'OP l'a indiqué, alors la réponse déjà acceptée est toujours la plus courte et la meilleure. Cependant, je veux fournir des alternatives utilisant Java 8 Streams , qui vous donneront plus d'avantages si elles font partie d'un pipeline pour un traitement ultérieur.En encapsulant le résultat de la fonction .split (un tableau natif) dans un flux, puis en le convertissant en liste.
S'il est important que le résultat soit stocké en tant
ArrayList
que selon le titre de l'OP, vous pouvez utiliser uneCollector
méthode différente :Ou en utilisant l'API d'analyse de RegEx:
Notez que vous pouvez toujours envisager de laisser la
list
variable tapée commeList<String>
au lieu deArrayList<String>
. L'interface générique deList
semble toujours assez similaire à laArrayList
implémentation.En eux-mêmes, ces exemples de code ne semblent pas en ajouter beaucoup (sauf plus de frappe), mais si vous prévoyez d'en faire plus, comme cette réponse sur la conversion d'une chaîne en une liste de Longs montre , l'API de streaming est vraiment puissante en permettant pour canaliser vos opérations les unes après les autres.
Pour le bien, vous savez, l'exhaustivité.
la source
la source
collect(toList())
pourcollect(Collectors.toList()
collect(toList())
utilise l'importation statique deCollectors.toList()
pour plus de brièveté et de fluidité :)Il n'y a pas de méthode intégrée pour cela, mais vous pouvez simplement utiliser la méthode split () dans cela.
la source
Cela devrait fonctionner pour vous.
la source
vous pouvez combiner asList et diviser
la source
Ce code vous aidera,
la source
Vous pouvez utiliser Guava pour diviser la chaîne et la convertir en ArrayList. Cela fonctionne également avec une chaîne vide et renvoie une liste vide.
génère les éléments suivants:
la source
Un exemple utilisant
Collections
.la source
Il existe de nombreuses façons de résoudre ce problème en utilisant des flux dans Java 8, mais les lignes suivantes de l'OMI sont simples:
la source
Vous pouvez tout d' abord les séparer à l' aide
String.split(",")
, puis convertir la chaîne de retourarray
à uneArrayList
aide deArrays.asList(array)
la source
Dans groovy, vous pouvez utiliser la méthode tokenize (Character Token):
la source
Même résultat que vous pouvez obtenir en utilisant la classe Splitter.
(écrit en kotlin)
la source
la source
J'utilise généralement un modèle précompilé pour la liste. Et cela est également légèrement plus universel car il peut considérer les crochets qui suivent certaines des expressions listToString.
la source
Dans Kotlin, si votre liste de chaînes comme celle-ci et que vous pouvez utiliser pour convertir une chaîne en ArrayList, utilisez cette ligne de code
la source
la source
Vous pouvez le faire comme suit.
Cela supprime les espaces blancs et les divise par des virgules où vous n'avez pas à vous soucier des espaces blancs.
la source
Chaîne -> Conversion de collection : (Chaîne -> Chaîne [] -> Collection)
Collection -> Conversion chaîne [] :
Chaîne -> Conversion chaîne [] :
Et Collection -> Collection :
la source
convertir la collection en chaîne comme une virgule séparée dans Java 8
L'objet listOfString contient les éléments ["A", "B", "C", "D"]
La sortie est: - 'A', 'B', 'C', 'D'
Et convertir un tableau de chaînes en liste dans Java 8
la source
la source
ArrayList
? Avez-vous même lu la question?ArrayList
. J'ai annulé les modifications de la première révision (afin que vous puissiez le voir) et amélioré la mise en forme de la première révision.