Le fractionnement d'une liste séparée par des espaces
C'est une tâche commune que je suis confronté: le fractionnement d'une liste séparée par des espaces dans un tête élément et un tableau contenant les queue éléments. Par exemple, compte tenu de cette chaîne:
the quick brown fox
Nous voulons:
"the"
["quick","brown","fox"]
.. dans deux variables différentes. La première variable doit être une chaîne de caractères, et la seconde d'un tableau. Je suis à la recherche d'un élégant façon de le faire (de préférence en Java).
Comment très LISP de vous.
OriginalL'auteur Wram | 2010-07-09
Vous devez vous connecter pour publier un commentaire.
Pour certaines valeurs de l'élégant:
Je ne peux pas penser à une façon de le faire avec moins de code...
Arrays.copyOfRange()
- wow, merci, j'apprends quelque chose de nouveau chaque jour à partir d'autres peuples réponses!Si l'utilisateur a l'intention de "pop" un élément de la Chaîne de tableau [], puis liste serait mieux, non? (Je suis en train de penser à la solution ci-dessus fonctionne, il pourrait rendre compte que).
OriginalL'auteur Alterscape
La plus élégante est probablement d'utiliser
String.split
pour obtenir unString[]
, puis à l'aideArrays.asList
de le transformer en unList<String>
. Si vous avez vraiment besoin d'une liste séparée moins la tête, il suffit d'utiliserList.subList
.À l'aide d'un
List
vous permet de tirer parti de la richesse des fonctionnalités offertes par Java Collections Cadre.Voir aussi
Arrays.copyOfRange()
solution, je pense que le vôtre remporte probablement à l'élégance, à moins que le demandeur a des besoins de la vitesse de l'éclair ou est dans une très faible mémoire de l'environnement (dans ce cas, pourquoi diable est-il/elle à l'aide de Java?)OriginalL'auteur polygenelubricants
Bien, vous obtenez la plupart de ce que vous voulez avec
. Votre résultat sera un tableau de Chaînes de caractères.
Si vous voulez vraiment, vraiment le premier élément séparé du reste, vous pouvez faire quelque chose comme:
...fait.
OriginalL'auteur Carl Smotricz
OriginalL'auteur Carl Manaster
Aurait été beaucoup plus facile en Haskell 🙂
OriginalL'auteur Thorbjørn Ravn Andersen
Vous pourriez faire usage de
String#split()
en prenant une limite de la 2ème argument.OriginalL'auteur BalusC
OriginalL'auteur Salil
Utilisation StringTokenizer et une boucle while pour parcourir chaque élément. L'intérieur de la boucle, vous pouvez obtenir le premier élément et mettre le reste dans un tableau.
Edit: Oh, je suppose que StringTokenizer est un "héritage" de la classe (bien qu'il fonctionne encore).
La méthode recommandée est maintenant d'utiliser Chaîne de caractères.split(). Qui vous donnera un String[] contenant vos éléments. À partir de là, il doit être facile à obtenir le premier élément et également créer un tableau sur le reste des éléments.
C'est correct, comme les tableaux sont immuables, vous devez utiliser le Système.arraycopy. Mais c'est un point discutable, car il serait préférable d'utiliser la fonction split() comme d'autres ont décrit.
OriginalL'auteur Jeff