我在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
变量上,并在地图中插入了正确的值
答案 0 :(得分:0)
当您执行matcher.find()
时,您正在消耗一个事件。
您有两种解决方案:
1)插入时添加一个,这并不是很干净且可读性
2)在插入之前进行测试
int count = 0;
while (matcher.find()) {
count++;
}
if (n>0) mapResult.put(textInFiles.get(i), count);