Java:如何获取Iterator 从字符串


问题内容

我需要Iterator<Character>一个String物体。Java中是否有可用的功能可以提供此功能,或者我必须自己编写代码?


问题答案:

一种选择是使用番石榴

ImmutableList<Character> chars = Lists.charactersOf(someString);
UnmodifiableListIterator<Character> iter = chars.listIterator();

这将产生不可变的字符列表,该列表由给定的字符串支持(不涉及复制)。

但是,如果最终自己做,那么我建议不要Iterator像其他许多示例那样公开实现类。我建议改为制作自己的实用程序类并公开静态工厂方法:

public static Iterator<Character> stringIterator(final String string) {
  // Ensure the error is found as soon as possible.
  if (string == null)
    throw new NullPointerException();

  return new Iterator<Character>() {
    private int index = 0;

    public boolean hasNext() {
      return index < string.length();
    }

    public Character next() {
      /*
       * Throw NoSuchElementException as defined by the Iterator contract,
       * not IndexOutOfBoundsException.
       */
      if (!hasNext())
        throw new NoSuchElementException();
      return string.charAt(index++);
    }

    public void remove() {
      throw new UnsupportedOperationException();
    }
  };
}