我正在使用StringUtils.countMatches
计算单词频率,有没有办法搜索文字以查找以某些字符开头的单词?
示例:
在“我公寓里的人造艺术”中搜索艺术将返回3!我需要它返回2只用 art 开头的单词。
我的解决方案是用空格替换文本中的\ r和\ n,并将代码修改为:
text = text.replaceAll("(\r\n|\n)"," ").toLowerCase();
searchWord = " "+searchWord.toLowerCase();
StringUtils.countMatches(text, searchWord);
我也试过以下正则表达式:
patternString = "\\b(" + searchWord.toLowerCase().trim() + "([a-zA-Z]*))";
pattern = Pattern.compile(patternString);
matcher = pattern.matcher(text.toLowerCase());
问题: - 我的第一个解决方案是否有意义还是有更好的方法来做到这一点?
- 我的第二个解决方案更快了?因为我正在使用大文本文件和大量的搜索词。
由于
答案 0 :(得分:3)
text = text.replaceAll("(\r\n|\n)"," ").toLowerCase();
searchWord = " "+searchWord.toLowerCase();
String[] words = text.split(" ");
int count = 0;
for(String word : words)
if(searchWord.length() < word.length())
if(word.substring(word.length).equals(searchWord))
count++;
循环提供相同的效果。
答案 1 :(得分:1)
使用正则表达式计算art...
的示例。要使用的模式是:
\b<search-word>
此处,\b
与word boundary匹配。当然,\b
在模式字符串中列出时需要进行转义。以下是一个例子:
String input = "artificial art in my apartment";
Matcher matcher = Pattern.compile("\\bart").matcher(input);
int count = 0;
while (matcher.find()) {
count++;
}
System.out.println(count);
输出:2