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)));
}
,並在主方法,我們可以用一個for循環:
public static void main(String[] args) throws IOException {
for(String line : new UKWacSentenceIterator()) {
System.out.println(line);
}
}
他目前已經有這個問題for循環,因爲一旦第一個文件是EOF
就停止。於是,他以爲會是一個好主意,覆蓋
@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循環使用了什麼。
我不認爲會有那麼多不同。在我的朋友的情況下,他只更新他擁有的唯一文件掃描器。新的文件掃描儀將位於advanceFileScanner方法內,也許使用計數器。我真正感興趣的是從for循環獲取所需信息的位置。 – dierre 2012-02-03 09:40:56