Java在字符串中查找单词

我需要在HTML源代码中找到一个单词。 我还需要计算发生次数。 我正在尝试使用正则表达式。 但它说0匹配发现。

我正在使用正则表达式,因为我认为它是最好的方法。 如果有更好的方法,请告诉我。

我需要在HTML源代码中找到“hsw.ads”这个词的出现。

我采取了以下步骤。

int count = 0; { Pattern p = Pattern.compile(".*(hsw.ads).*"); Matcher m = p.matcher(SourceCode); while(m.find())count++; } 

但计数是0;

请让我知道您的解决方案。

谢谢。 帮助搜索者

你应该试试这个。

 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)。

你没有匹配任何“表达式”,所以可能一个简单的字符串搜索会更好。 commons-lang有StringUtils.countMatches(source, "yourword")

如果您不想包含commons-lang,则可以手动编写。 简单地多次使用source.indexOf("yourword", x) ,每次提供更大的x值(这是偏移量),直到它得到-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; } 

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和广告之间的时间段,你需要逃避它。