J'ai besoin de renvoyer un tableau String
. J'utilise Guava pour diviser la String
. Veuillez consulter le code ci-dessous
Iterable<String> arrayOfValues = Splitter.on(";").split(myString);
il retourne une Iterable
. mais j'ai besoin d'un String[]
. Est-il possible de donner Iterator< Element >
et de le convertir en Array[]
. Merci beaucoup
Utilisez la méthode Iterables.toArray(Iterable<? extends T> iterable, Class<T> type)
en goyave.
Si vous utilisez la méthode plain Java String.split (regex), tout va bien. Il retourne une chaîne [].
"my;string".split(";")
String[] splits = mystring.split(";");
N'utilisez pas de bibliothèques sophistiquées si vous n'en avez pas besoin.
Vous pouvez également utiliser FluentIterable :
FluentIterable.from(Splitter.on(":").split(mystring)).toArray(String.class)
En Java 8, je préfère utiliser un flux pour convertir un itératif en tableau:
StreamSupport.stream(yourIterable.spliterator(), false).toArray(String[]::new)
Je suis vraiment d'accord avec la réponse de @rec: N'utilisez pas de bibliothèques sophistiquées si vous n'en avez pas besoin.
Mais, je vous recommande fortement de lire le séparateur de Guava documentation } _:
Parce que le séparateur intégré à Java peut avoir des comportements délicats.
Par exemple, supposons que vous ayez des virgules de fin ou des virgules successives dans votre entrée . Que sera renvoyé après la scission?
null
""
;)
Sans Guava, vous pourriez convertir un Iterable<String>
en un tableau avec quelque chose comme ceci
public static <String> String[] toArray(Iterable<String> itr) {
ArrayList<String> ret = new ArrayList<>();
for(String t : itr) {
ret.add(t);
}
return ret.toArray(new String[]);
}
Il est un peu difficile d’écrire une version générique de cette fonction en raison de la myriade de problèmes avec les tableaux génériques en Java, }, donc avancez légèrement.
En goyave, vous pouvez le convertir comme suit
String test= "Welcome to Java world";
Iterable<String> tokens=Splitter.on(" ").split(test);
String array[]=Iterables.toArray(tokens,String.class);
Si vous souhaitez simplement accéder aux éléments Iterator comme un tableau, inutile de convertir. Vous pouvez accéder directement à ces éléments par index
par exemple
System.out.println(Iterables.get(tokens,2));
Même si la question dit "Convertir Iterator en tableau", les réponses expliquent uniquement comment convertir Iterable en tableau.
Donc, pour convertir Iterator en Array with Guava, vous pouvez utiliser Iterators.toArray(Iterator<? extends T> iterator, Class<T> type)
.