【问题标题】:Why can’t StringUtils.join accept a StringCharacterIterator?为什么 StringUtils.join 不能接受 StringCharacterIterator?
【发布时间】:2011-06-28 08:27:50
【问题描述】:

下面的代码应该可以工作,因为join 接受一个迭代器作为参数:

import static org.apache.commons.lang.StringUtils.join;
import java.text.StringCharacterIterator;

…

join(new StringCharacterIterator("A String"), " ");

唉,事实并非如此。谁能给我解释一下为什么?

【问题讨论】:

    标签: java iterator apache-commons apache-stringutils


    【解决方案1】:

    根据文档,StringCharacterIterator 继承自并且仅继承自 CharacterIteratorCharacterIterator 不继承自通用 Iterator,而这是 join 想要的。

    http://download.oracle.com/javase/1.4.2/docs/api/java/text/CharacterIterator.html

    【讨论】:

    • 所以答案是Java标准库是一团糟。所以我需要this
    • @飞羊:部分是的。当你处理跨库时,比如 Oracle/Java 和 Apache,它会变得更加混乱。
    • 没有。它以 Iterator 结尾的事实并不意味着它必须具有相同的接口。 HashTable 与 WoodTable 没有太多共同之处。
    • 我不想争论这个。 “Iterator”在大多数编程语言(其中一种是 Java)中是一个明确的术语。如果某个东西没有实现同名的内置接口,你就不要称它为迭代器。
    • @flyingsheep 实际上,如果您查看 Iterator 类的 javadoc,它会明确谈论一个集合(数组不是,或者没有实用方法将其转换为集合)。字符串也是一个字符数组,如图所示,它不是 Oracle 领域的集合。我的猜测是它被称为StringCharacterIterator,因为CharacterArrayTraversalAgent 听起来不太好。
    【解决方案2】:

    首先,join 方法有两个参数:一个迭代器和一个分隔符字符串或字符。

    如果你查看javadoc of StringCharacterIterator,你会发现这个类没有实现java.util.Iterator

    【讨论】:

    • 啊,当然,我忘了输入第二个参数。但是,它在我的代码中。
    猜你喜欢
    • 2011-04-19
    • 1970-01-01
    • 2015-12-15
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-04
    相关资源
    最近更新 更多