在ArrayList <String>中搜索单词并将结果保存到Map <String,Integer>

时间:2019-07-10 15:05:52

标签: java arrays arraylist pattern-matching

我在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 :(得分:0)

当您执行matcher.find()时,您正在消耗一个事件。

您有两种解决方案:

1)插入时添加一个,这并不是很干净且可读性

2)在插入之前进行测试

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