[英]Java Find word in a String
我需要在HTML源代码中找到一个单词。 我还需要计算发生次数。 我正在尝试使用正则表达式。 但它说发现了0场比赛。
我正在使用正则表达式,因为我认为它是最好的方式。 如有更好的方法,请告诉我。
我需要在HTML源代码中找到“hsw.ads”这个词的出现。
我采取了以下步骤。
int count = 0;
{
Pattern p = Pattern.compile(".*(hsw.ads).*");
Matcher m = p.matcher(SourceCode);
while(m.find())count++;
}
但计数是0;
请让我知道您的解决方案。
谢谢。 帮助搜索者
你没有匹配任何“表达式”,所以可能一个简单的字符串搜索会更好。 commons-lang有StringUtils.countMatches(source, "yourword")
。
如果您不想包含commons-lang,可以手动编写。 简单地多次使用source.indexOf("yourword", x)
,每次提供更大的x
值(这是偏移量),直到它得到-1
你应该试试这个。
private int getWordCount(String word,String source){
int count = 0;
{
Pattern p = Pattern.compile(word);
Matcher m = p.matcher(source);
while(m.find()) count++;
}
return count;
}
传递要在字符串中搜索的单词(Not pattern)。
要在Java中查找字符串,可以使用String方法indexOf
,它告诉您搜索的字符串的第一个字符的索引。 要查找所有这些并计算它们,您可以执行此操作(可能有更快的方法,但这应该工作)。 我建议使用StringUtils CountMatches方法。
String temp = string; //Copy to save the string
int count = 0;
String a = "hsw.ads";
int i = 0;
while(temp.indexOf(a, i) != -1) {
count++;
i = temp.indexof(a, i) + a.length() + 1;
}
StringUtils.countMatches(SourceCode,“hsw.ads”)应该工作,但是坚持你上面的方法(这是有效的),我建议一些事情:1。正如John Haager提到的,删除开启/关闭。*会有所帮助,因为你正在寻找那个确切的子串2.你想要逃脱'。' 因为你正在寻找文字“。” 而不是通配符3.我会使这个模式保持不变并重复使用它,而不是每次都重新创建它。
也就是说,我仍然建议使用上面的方法,但我想我只是指出你当前的方法在概念上没有缺陷; 只缺少一些实施细节。
您的代码和正则表达式有效。 您不需要在正则表达式的开头和结尾包含。*。 例如:
String t = "hsw.ads hsw.ads hsw.ads";
int count = 0;
Matcher m = Pattern.compile("hsw\\.ads").matcher(t);
while (m.find()){ count++; }
在这种情况下,计数是3.而另一件事,如果你打算使用正则表达式,如果你真的想要专门寻找一个'。' 在hsw和广告之间的时间段,你需要逃避它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.