텍스트 파일을 읽고 해당 텍스트 파일의 고유 단어 집합을 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);
}
}
따라서 어휘의 내용을 인쇄 한 후에는 모든 단어 뒤에 단어가 건너 뜁니다. 그러므로 예를 들어 다음 텍스트 파일이있는 경우;
는
인쇄 된 내용은 "게으른 이상 빠른 여우"이며, 다음은 나에게 오류를 제공 "빠른 갈색 여우가 게으른 개 점프";
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() 문과 관련이 있다고 생각합니다.
'ArrayList'보다는 ['HashSet'] (http://docs.oracle.com/javase/6/docs/api/java/util/HashSet.html)을 사용하십시오. 자동으로 중복을 무시합니다. –
그레그 덕분에 HashSet을 사용하는 것이 훨씬 쉽고 훨씬 더 간단했습니다. 매우 감사. – Triple777er