Как увидеть, сколько раз слова из массива строк присутствуют в текстовом файле

#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);