У нас есть
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
, 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;
Я не знаю, пытался ли он еще. Мне было интересно, если вы думаете, это хорошая идея, и если вы можете предложить мне хороший учебник о том, как создать повторяемый объект. Потому что сейчас я просто догадываюсь, я не знаю, какой цикл for использует, кроме hasNext()
.