Итак, я хочу отсканировать текстовый файл и узнать общее количество раз, когда слова в моем массиве используются в этом текстовом файле.
Используя мой код, я могу только узнать, сколько раз слово в нулевой позиции в моем массиве встречается в текстовом файле. Мне нужно общее количество всех слов в моем массиве.
String[] arr = {"hello", "test", "example"};
File file = new File(example.txt);
int wordCount = 0;
Scanner scan = new Scanner(file);
for(int i = 0; i<arr.length; i++){
while (scan.hasNext()) {
if (scan.next().equals(arr[i])){
wordCount++;
}
}
}
System.out.println(wordCount);
Пример.txt будет следующим:
hello hello hi okay test hello example test
this is a test hello example
Там для желаемого результата я хотел бы для wordCount = 9
вместо этого wordCount для моего приведенного выше кода равен 4 (количество приветствий указано в текстовом файле)
Может быть, я вас неправильно понимаю, но я получаю исключение RunTime, когда делаю то, что вы пытаетесь
Здесь происходит следующее: в первом цикле достигнут конец файла, и вы получаете только количество «привет». Вы можете перенастроить указатель на начало файла в конце/начале каждого цикла.
String[] arr = {"hello", "test", "example"};
File file = new File(example.txt);
int wordCount = 0;
for(int i = 0; i<arr.length; i++){
Scanner scan = new Scanner(file);
while (scan.hasNext()) {
if (scan.next().equals(arr[i])){
wordCount++;
}
}
}
System.out.println(wordCount);
Отсканируйте строку из файла, затем отсканируйте arr
на совпадения...
try (Scanner scan = new Scanner(file)) {
while (scan.hasNext()) {
String next = scan.next()
for(int i = 0; i<arr.length; i++){
if (next.equals(arr[i])){
wordCount++;
}
}
}
}
Переверните свои циклы, то есть для каждой строки просканируйте
arr
на предмет совпадений вместо того, что вы делаете, что в основном противоположно, за исключением того, что когда вы пытаетесь найти следующее совпадающее слово, вы уже прочитали дальше конец файла