#java #arrays #file #search
#java #массивы #файл #Поиск
Вопрос:
Итак, я хочу отсканировать текстовый файл и узнать общее количество раз, когда слова из моего массива используются в этом текстовом файле.
Используя мой код, я могу только узнать, сколько раз слово в нулевой позиции в моем массиве встречается в текстовом файле. Мне нужно общее количество всех слов в моем массиве.
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);
The example.txt было бы так, как показано ниже:
hello hello hi okay test hello example test
this is a test hello example
Там для, желаемый результат, который я хотел бы, был бы для WordCount = 9
вместо этого количество слов в моем приведенном выше коде равно 4 (количество hello указано в текстовом файле)
Комментарии:
1. Измените свои циклы на обратные — то есть для каждой строки сканируйте
arr
совпадения, вместо того, что вы делаете, что в принципе противоположно, за исключением того, что когда вы пытаетесь найти следующее подходящее слово, вы уже прочитали дальше конца файла2. Возможно, я вас неправильно понимаю, но я получаю исключение во время выполнения, когда я делаю то, что вы пытаетесь
Ответ №1:
Отсканируйте строку из файла, затем отсканируйте 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 ;
}
}
}
}
Ответ №2:
Здесь происходит следующее: в первом цикле достигнут конец файла, и вы получаете только количество ‘hello’. Вы можете перенастроить указатель на начало файла в конце / начале каждого цикла.
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);