我正在尝试查找给定字符串和关键字组合的字词匹配的数量,如下所示:
public int matches(String keyword, String text){
// ...
}
示例:
给出以下电话:
System.out.println(matches("t", "Today is really great, isn't that GREAT?"));
System.out.println(matches("great", "Today is really great, isn't that GREAT?"));
结果应为:
0
2
到目前为止,我发现了这一点:Find a complete word in a string java
这仅返回如果给定关键字,但 出现的次数。此外,我不确定它是否忽略区分大小写(这对我很重要)。
请记住,应该忽略子串!我只想找到完整的单词。
更新
我忘了提到我也想要通过空格分隔的关键字来匹配。
E.g。
matches("today is", "Today is really great, isn't that GREAT?")
应该返回1
答案 0 :(得分:2)
如何利用indexOf?
s1 = s1.toLowerCase(Locale.US);
s2 = s2.toLowerCase(Locale.US);
int count = 0;
int x;
int y = s2.length();
while((x=s1.indexOf(s2)) != -1){
count++;
s1 = s1.substr(x,x+y);
}
return count;
高效版
int count = 0;
int y = s2.length();
for(int i=0; i<=s1.length()-y; i++){
int lettersMatched = 0;
int j=0;
while(s1[i]==s2[j]){
j++;
i++;
lettersMatched++;
}
if(lettersMatched == y) count++;
}
return count;
要获得更有效的解决方案,您必须稍微修改KMP算法。只是google它,它很简单。
答案 1 :(得分:1)
使用带有单词边界的正则表达式。这是迄今为止最简单的选择。
int matches = 0;
Matcher matcher = Pattern.compile("\\bgreat\\b", Pattern.CASE_INSENSITIVE).matcher(text);
while (matcher.find()) matches++;
但你的语言可能因某些外语而异。
答案 2 :(得分:0)
好吧,您可以使用“拆分”来分隔单词并查找是否存在完全匹配的单词。 希望有所帮助!
答案 3 :(得分:0)
一个选项是RegEx。基本上听起来你正在寻找一个单词与左边或右边的任何标点符号。这样:
“很棒。” “好极了!” “很棒” “很棒,” “大”会全部匹配,但
“最大”
不会