【发布时间】:2012-02-25 21:59:36
【问题描述】:
我们有
public class UKWacSentenceIterator implements SentenceIterator
这显然是一个 Tterator,但我没有任何关于 SentenceIterator 的信息。这个类有这个属性:Scanner fileScanner。
这个想法是构造函数接受一个文件数组:
public UKWacSentenceIterator() throws IOException {
Properties p = new Properties();
p.load(prop.class.getClassLoader()
.getResourceAsStream("sources/ukwacdump.properties"));
Enumeration<Object> keys = p.elements();
while (keys.hasMoreElements()) {
source.add(keys.nextElement());
}
fileScanner = new Scanner(new File((String) source.get(0)));
}
在main方法中我们可以使用for循环:
public static void main(String[] args) throws IOException {
for(String line : new UKWacSentenceIterator()) {
System.out.println(line);
}
}
他目前遇到了这个 for 循环的问题,因为一旦第一个文件是 EOF,for 就会停止。所以他认为重写是个好主意
@Override
public boolean hasNext() {
if(tmp != null) {
return true;
}
if (this.fileScanner.hasNext()) {
try {
this.skipToSequenceStart();
String sent = this.scanSentence();
this.tmp = sent;
return true;
} catch (Exception e) {
return false;
}
} else {
return advanceFileScanner();
}
}
但他不知道如何构建advanceFileScanner()。
我的想法是将变量 fileScanner 分配给具有下一个文件名的新 Scanner,然后复制
this.skipToSequenceStart();
String sent = this.scanSentence();
this.tmp = sent;
return true;
我不知道他是否尝试过。我想知道您是否认为这是一个好主意,是否可以向我推荐一个关于如何创建可迭代对象的好教程。因为现在我只是猜测,除了hasNext(),我不知道 for 循环使用什么。
【问题讨论】: