我正在使用StringUtils.countMatches来计算单词频率,有没有一种方法可以搜索文本以查找以某些字符开头的单词?

例:


  在“我的公寓中的人造艺术”中搜索艺术品会返回3!我需要它返回仅以art开头的单词的2。


我的解决方案是用空格替换文本中的\ 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());


问题:
-我的第一个解决方案有意义吗,或者有更好的方法吗?

-我的第二个解决方案更快吗?因为我正在处理大型文本文件和相当数量的搜索词。

谢谢

最佳答案

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++;


循环提供相同的效果。

10-05 21:15