gpt4 book ai didi

java - 使用正则表达式搜索文本中的多个单词 (Java)

转载 作者:行者123 更新时间:2023-11-30 01:48:34 25 4
gpt4 key购买 nike

我有一种方法可以搜索文本中的单词,两者都是通过参数插入的。

public Integer findTheWord(String stringToCheck, String regexString) throws IOException {

int count = 0;
Pattern regexp = Pattern.compile("\\b" + regexString + "\\b");
Matcher matcher = regexp.matcher(stringToCheck);

while (matcher.find()) {
count++;
String matchString = matcher.group();
System.out.println(matchString);
}
System.out.println(count);
return count;
}

如何插入多个单词并返回每个单词出现的次数?

最佳答案

因此,第一个也是最简单的选择是使用实际的 findTheWord() 方法并创建一个使用它的新方法:

public Map<String, Integer> findTheWords(String stringToCheck, List<String> words) {
return words.stream().distinct()
.collect(Collectors.toMap(Function.identity(), word -> findTheWord(stringToCheck, word)));
}

public Integer findTheWord(String stringToCheck, String regexString) {
Pattern regexp = Pattern.compile("\\b" + regexString + "\\b");
Matcher matcher = regexp.matcher(stringToCheck);

int count = 0;
while (matcher.find()) {
count++;
}
return count;
}

这样做的问题是,如果您使用大量单词来查找和大型文本,因为它会迭代每个单词的给定字符串。因此,另一种方法是为所有单词创建一个正则表达式,并在结果映射中增加下一个找到的单词:

public Map<String, Integer> findTheWords(String stringToCheck, List<String> words) {
Pattern regexp = Pattern.compile(words.stream().distinct().map(word -> "\\b" + word + "\\b").collect(Collectors.joining("|")));
// creates a pattern like this: "\ba\b|\bb\b|\bc\b|\bd\b|\be\b"
Matcher matcher = regexp.matcher(stringToCheck);
Map<String, Integer> result = new HashMap<>();
while (matcher.find()) {
String word = matcher.group();
result.put(word, result.getOrDefault(word, 0) + 1);
}
return result;
}

此外,您可能会考虑对单词使用 Set 而不是 List,因为值是唯一的,因此无需调用 。流上的distinct()

关于java - 使用正则表达式搜索文本中的多个单词 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56903361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com