22

我需要返回一个String数组。我使用 Guava 来拆分String. 请看下面的代码

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

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

4

8 回答 8

39

使用Iterables.toArray(Iterable<? extends T> iterable, Class<T> type)Guava 中的方法。

于 2013-07-31T10:03:12.497 回答
22

如果您使用普通的 Java String.split(regex) 方法,那就没问题了。它返回一个字符串 []。

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

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

如果您不需要它们,请不要使用花哨的库。

于 2013-07-31T10:05:28.960 回答
7

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

StreamSupport.stream(yourIterable.spliterator(), false).toArray(String[]::new)
于 2018-08-16T11:00:44.010 回答
4

您还可以使用 Guava 的FluentIterable

FluentIterable.from(Splitter.on(":").split(mystring)).toArray(String.class)
于 2013-08-02T15:52:20.233 回答
2

如果没有 Guava,您可以将 an 转换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 中的泛型数组存在无数问题,因此编写此函数的泛型版本有点困难,因此请谨慎行事。

于 2018-03-07T07:20:42.723 回答
0

在番石榴中,您可以将其转换为以下

 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));
于 2016-08-10T08:14:14.923 回答
0

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

因此,要使用 Guava 将 Iterator 转换为 Array,您可以使用Iterators.toArray(Iterator<? extends T> iterator, Class<T> type).

于 2017-02-02T06:37:50.103 回答
0

我真的同意@rec 的回答:如果不需要,就不要使用花哨的库

但是,我强烈建议阅读 Guava 的分离器文档

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

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

  • null
  • ""
  • (丢弃)

;)

于 2018-10-04T14:31:29.653 回答