私はテキストファイルを読んでいて、そのテキストファイルからのユニークな単語のセットを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);
}
}
そのため、語彙の内容を印刷した後、すべての単語の後にスキップされる単語があります。したがって、たとえば、次のテキストファイルがある場合。
「速い茶色のキツネが怠惰な犬を飛び越える」
印刷された内容は「quickfoxoverlazy」で、エラーが発生します。
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()ステートメントと関係があると感じています。