我正在读取一个文本文件,并将该文本文件中的一组唯一字存储到一个ArrayList中(请确认是否有更好的结构来完成此操作)。我使用扫描仪扫描文本文件并将分隔符指定为“”(空格),如下所示;Java分隔符跳过一个词
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);
}
}
因此,在打印词汇表的内容后,每个单词后都会跳过一个单词。因此,例如,如果我有以下文本文件;
“敏捷的棕色狐狸跳过懒狗”
印制的内容是“过懒快速狐狸”,然后给我一个错误;
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()语句有关。
使用['HashSet'](http://docs.oracle.com/javase/6/docs/api/java/util/HashSet.html)而不是'ArrayList' - 它会自动忽略重复项。 –
Thankyou Greg,使用HashSet更容易,工作也更少。非常感激。 – Triple777er