Java:如何从 String 获取 Iterator<Character>

2022-09-01 07:21:21

我需要一个来自对象的。Java中是否有任何可用的函数为我提供此功能,或者我必须编写自己的代码?Iterator<Character>String


答案 1

一种选择是使用番石榴

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();
    }
  };
}

答案 2

它不存在,但实现起来很简单:

class CharacterIterator implements Iterator<Character> {

    private final String str;
    private int pos = 0;

    public CharacterIterator(String str) {
        this.str = str;
    }

    public boolean hasNext() {
        return pos < str.length();
    }

    public Character next() {
        return str.charAt(pos++);
    }

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

实现可能和它得到的一样有效。