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

Итак, я хочу отсканировать текстовый файл и узнать общее количество раз, когда слова в моем массиве используются в этом текстовом файле.

Используя мой код, я могу только узнать, сколько раз слово в нулевой позиции в моем массиве встречается в текстовом файле. Мне нужно общее количество всех слов в моем массиве.

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 (количество приветствий указано в текстовом файле)

Переверните свои циклы, то есть для каждой строки просканируйте arr на предмет совпадений вместо того, что вы делаете, что в основном противоположно, за исключением того, что когда вы пытаетесь найти следующее совпадающее слово, вы уже прочитали дальше конец файла

MadProgrammer 09.04.2019 03:55

Может быть, я вас неправильно понимаю, но я получаю исключение RunTime, когда делаю то, что вы пытаетесь

Forrest 09.04.2019 04:01
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
52
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Здесь происходит следующее: в первом цикле достигнут конец файла, и вы получаете только количество «привет». Вы можете перенастроить указатель на начало файла в конце/начале каждого цикла.


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++;
            }
        }
    }
}

Другие вопросы по теме