String
配列を返す必要があります。グアバを使用してString
を分割します。以下のコードをご覧ください
Iterable<String> arrayOfValues = Splitter.on(";").split(myString);
Iterable
を返します。 String[]
が必要です。 Iterator< Element >
を指定してArray[]
に変換する方法はありますか?どうもありがとう
Guavaで Iterables.toArray(Iterable<? extends T> iterable, Class<T> type)
メソッドを使用します。
単純なJava String.split(regex)メソッドを使用している場合は問題ありません。String[]を返します。
"my;string".split(";")
String[] splits = mystring.split(";");
必要のないファンシーライブラリは使用しないでください。
Java 8では、イテラブルを配列に変換するためにストリームを使用することを好みます:
StreamSupport.stream(yourIterable.spliterator(), false).toArray(String[]::new)
Guavaの FluentIterable を使用することもできます:
FluentIterable.from(Splitter.on(":").split(mystring)).toArray(String.class)
グアバがなければ、Iterable<String>
は、次のような配列に
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[]);
}
Javaの汎用配列に関する無数の問題 のため、この関数の汎用バージョンを書くのは少し難しいので、軽く踏み込んでください。
@recの答えに本当に同意します:必要ない場合はファンシーライブラリを使用しないでください。
しかし、私はグアバのスプリッターを読むことを強くお勧めします ドキュメント :
なぜなら、Java組み込みスプリッターには、いくつかのトリッキーな動作があるかもしれないからです。
たとえば、入力に末尾のカンマまたは連続するカンマがあるとします。分割後に何が返されますか?
null
""
;)
グアバでは次のように変換できます
String test= "Welcome to Java world";
Iterable<String> tokens=Splitter.on(" ").split(test);
String array[]=Iterables.toArray(tokens,String.class);
配列のようにイテレータ要素にアクセスしたいだけなら、変換する必要はありません。これらの要素にはインデックスで直接アクセスできます
例えば
System.out.println(Iterables.get(tokens,2));
質問には「イテレータを配列に変換する」と書かれていますが、回答では、Iterableを配列に変換する方法のみを説明しています。
したがって、イテレータをGuavaで配列に変換するには、Iterators.toArray(Iterator<? extends T> iterator, Class<T> type)
を使用できます。