使用番石榴将其转换为数组

问题描述 投票:22回答:8

我需要返回一个String数组。我使用番石榴来分割String。请参见下面的代码

Iterable<String> arrayOfValues =  Splitter.on(";").split(myString);

它返回Iterable。但我需要一个String[]。有什么办法可以给Iterator< Element >并将其转换为Array[]。非常感谢

java guava
8个回答

21
投票

如果使用普通的Java String.split(regex)方法,就可以了。它返回一个String []。

Iterables.toArray(Iterable<? extends T> iterable, Class<T> type)

如果不需要,请不要使用精美的库。


6
投票

在Java 8中,我更喜欢使用流将可迭代对象转换为数组:

"my;string".split(";")

String[] splits = mystring.split(";");

4
投票

您也可以使用番石榴的StreamSupport.stream(yourIterable.spliterator(), false).toArray(String[]::new)

FluentIterable

2
投票

没有番石榴,您可以将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[]); } 内容不多,因此很难编写此函数的通用版本。


1
投票

我真的同意@rec的回答:如果不需要它们,请不要使用精美的库

但是,我强烈建议您阅读番石榴的分离器myriad issues with generic arrays in Java,

因为Java内置拆分器可能有一些棘手的行为。。

例如,假设您的输入中包含尾随逗号或连续逗号。拆分后会返回什么?

;)


0
投票

在番石榴中,您可以将其转换为关注对象

""

如果只想像数组一样访问Iterator元素,则无需进行转换。您可以通过索引直接访问这些元素

例如

 String test= "Welcome to java world";
 Iterable<String> tokens=Splitter.on(" ").split(test);
 String array[]=Iterables.toArray(tokens,String.class);

0
投票

即使问题说“将迭代器转换为数组”,答案也仅说明了如何将Iterable转换为数组。

因此,要使用Guava将Iterator转换为Array,可以使用 System.out.println(Iterables.get(tokens,2));

© www.soinside.com 2019 - 2024. All rights reserved.