我正在读取一个文本文件并将该文本文件中的一组唯一单词存储到一个 ArrayList 中(请建议是否有更好的结构来执行此操作)。我正在使用扫描仪扫描文本文件并将分隔符指定为“”(空格),如下所示;
ArrayList <String> allWords = new ArrayList <String> ();
ArrayList <String> Vocabulary = new ArrayList <String> ();
int count = 0;
Scanner fileScanner = null;
try {
fileScanner = new Scanner (new File (textFile));
} catch (FileNotFoundException e) {
System.out.println (e.getMessage());
System.exit(1);
}
fileScanner.useDelimiter(" ");
while (fileScanner.hasNext()) {
allWords.add(fileScanner.next().toLowerCase());
count++;
String distinctWord = (fileScanner.next().toLowerCase());
System.out.println (distinctWord.toString());
if (!allWords.contains(distinctWord)) {
Vocabulary.add(distinctWord);
}
}
因此,在打印 Vocabulary 的内容后,每个单词后面都会有一个单词被跳过。因此,例如,如果我有以下文本文件;
“敏捷的棕色狐狸跳过了懒狗”
打印的内容是“quick fox over lazy”,然后它给了我一个错误;
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at *java filename*.getWords(NaiveBayesTxtClass.java:82)
at *java filename*.main(NaiveBayesTxtClass.java:22)
谁能给我一些关于如何解决这个问题的建议?我感觉它与 fileScanner.useDelimiter 和 fileScanner.hasNext() 语句有关。