Java在字符串中查找单词

时间:2012-03-14 21:56:33

标签: java regex

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

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

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

我已采取以下步骤。

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

但是计数是0;

请告诉我您的解决方案。

谢谢。 帮助搜索者

5 个答案:

答案 0 :(得分:6)

你没有匹配任何“表达式”,所以可能一个简单的字符串搜索会更好。 commons-langStringUtils.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和广告之间的时间段,你需要逃避它。