什么是实现一个类(在 Java 中)的最简单方法,该类将用作符合给定正则表达式的所有值集的迭代器?
假设我有这样的课程:
public class RegexpIterator
{
private String regexp;
public RegexpIterator(String regexp) {
this.regexp = regexp;
}
public abstract boolean hasNext() {
...
}
public abstract String next() {
...
}
}
我该如何实施?该类假定对所有符合值的集合进行一些线性排序,并且 next() 方法应在第 i 次调用时返回第 i 个值。
理想情况下,解决方案应该支持完整的正则表达式语法(Java SDK 支持)。
为避免混淆,请注意该类不应该在给定字符串上迭代给定正则表达式的匹配项。相反,它应该(最终)枚举所有符合正则表达式的字符串值(即会被匹配器的matches() 方法接受),而不需要任何其他输入字符串作为参数。
为了进一步澄清这个问题,让我们举一个简单的例子。
RegexpIterator it = new RegexpIterator("ab?cd?e");
while (it.hasNext()) {
System.out.println(it.next());
}
此代码片段应具有以下输出(行的顺序无关紧要,即使首选列出较短字符串的解决方案)。
ace
abce
ecde
abcde
请注意,对于某些正则表达式,例如ab[A-Z]*cd
,类要迭代的值集是无限的。在这些情况下,前面的代码片段将永远运行。