繁体   English   中英

Java在字符串中查找单词

[英]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-langStringUtils.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM