Поиск слов в ArrayList <String>и сохранение результата на карте - PullRequest
0 голосов
/ 10 июля 2019

У меня есть несколько слов в List<String>, и я хочу выполнить итерацию внутри ArrayList<String>, ища совпадения и помещая каждое из них (с их вхождениями) в Map<String, Integer>. Я пишу этот метод:

public Map<String, Integer> findTheWords(ArrayList<String> textInFiles, List<String> words) {


        for (int i = 0; i < textInFiles.size(); i++) {

            Map<String, Integer> mapResult = new HashMap<>();

            for (int j = 0; j < words.size(); j++) {

                    int count = 0;

                    Pattern regexp = Pattern.compile("\\b" + words.get(j) + "\\b");
                    Matcher matcher = regexp.matcher(textInFiles.get(i));

                     if(matcher.find()) {
                         while (matcher.find()) {
                            count++;
                        }

                        mapResult.put(textInFiles.get(i), count);
                     }

            }
        }

    return mapResult;               
    }

Проблема с переменной count и вставкой правильного значения в карту

1 Ответ

0 голосов
/ 10 июля 2019

Когда вы делаете matcher.find(), вы потребляете событие.

У вас есть два решения:

1) добавление одного при вставке, который не очень чистый и читаемый

2), перед вставкой

int count = 0;
while (matcher.find()) {
     count++;
}
if (n>0) mapResult.put(textInFiles.get(i), count);
...