我需要在HTML源代码中找到一个单词。我还需要计算发生次数。我正在尝试使用正则表达式。但它说发现0匹配。
我正在使用正则表达式,因为我认为它是最好的方法。如果有更好的方法,请告诉我。
我需要在HTML源代码中找到“hsw.ads”这个词的出现。
我已采取以下步骤。
int count = 0;
{
Pattern p = Pattern.compile(".*(hsw.ads).*");
Matcher m = p.matcher(SourceCode);
while(m.find())count++;
}
但是计数是0;
请告诉我您的解决方案。
谢谢。 帮助搜索者
答案 0 :(得分:6)
你没有匹配任何“表达式”,所以可能一个简单的字符串搜索会更好。 commons-lang有StringUtils.countMatches(source, "yourword")
。
如果您不想包含commons-lang,可以手动编写。只需多次使用source.indexOf("yourword", x)
,每次提供更大的x
值(这是偏移量),直到它变为-1
答案 1 :(得分:4)
你应该试试这个。
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)传递给字符串。
答案 2 :(得分:1)
要在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;
}
答案 3 :(得分:0)
StringUtils.countMatches(SourceCode,“hsw.ads”)应该可以工作,但是坚持上面的方法(这是有效的),我建议一些事情: 1.正如John Haager所说,删除开启/关闭。*会有所帮助,因为你正在寻找那个确切的子串 你想逃避'。'因为你正在寻找文字“。”而不是通配符 3.我会使这个模式保持不变并重复使用它,而不是每次都重新创建它。
那就是说,我仍然建议使用上面的方法,但我想我只是指出你当前的方法在概念上没有缺陷;只缺少一些实施细节。
答案 4 :(得分:0)
您的代码和正则表达式有效。您不需要在正则表达式的开头和结尾包含。*。例如:
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和广告之间的时间段,你需要逃避它。