Java 这个词在html页面上使用了多少次

Java 这个词在html页面上使用了多少次,java,Java,我有一个方法,它应该返回一个整数,即HTML文档文本中搜索词的使用次数: public int searchForWord(String searchWord) { int count = 0; if(this.htmlDocument == null){ System.out.println("ERROR! Call crawl() before performing analysis on the document"); }

我有一个方法,它应该返回一个整数,即HTML文档文本中搜索词的使用次数:

public int searchForWord(String searchWord) {
    int count = 0;
    if(this.htmlDocument == null){
        System.out.println("ERROR! Call crawl() before performing analysis on the document");
    }
    System.out.println("Searching for the word " + searchWord + "...");
    String bodyText = this.htmlDocument.body().text();
    if (bodyText.toLowerCase().contains(searchWord.toLowerCase())){
        count++;
    }
    return count;
}

但是我的方法总是返回count=1,即使这个词被使用了好几次。我知道错误应该很明显,但我被卡住了,看不到它。

这些只是条件语句,您没有在HTML文本中循环,因此,如果它在bodyText中找到searchWord的实例,它将递增它,然后以值1退出该方法。我建议循环遍历html中的每个单词,将其添加到数组中,然后使用如下方式计算:

char[] bodyTextA = bodyText.toCharArray(); 
或者将其保存在字符串数组中,并按空格、新行或任何条件将其拆分。空间示例:

//puts hello, i'm, your, and string into their own array slots in the array 
/split
str = "Hello I'm your String";
String[] split = str.split("\\s+");

这些只是条件语句,您没有在HTML文本中循环,因此,如果它在bodyText中找到searchWord的实例,它将递增该实例,然后使用值1退出该方法。我建议循环遍历html中的每个单词,将其添加到数组中,然后使用如下方式计算:

char[] bodyTextA = bodyText.toCharArray(); 
或者将其保存在字符串数组中,并按空格、新行或任何条件将其拆分。空间示例:

//puts hello, i'm, your, and string into their own array slots in the array 
/split
str = "Hello I'm your String";
String[] split = str.split("\\s+");

您当前只检查一次文本是否包含搜索词,因此计数将始终为0或1。要查找总计数,请使用保持循环,同时可以使用指示开始搜索的索引的第二个参数查找字符串

public int searchForWord(String searchWord) {
    int count = 0;
    if(this.htmlDocument == null){
        System.out.println("ERROR! Call crawl() before performing analysis on the document");
    }
    System.out.println("Searching for the word " + searchWord + "...");
    String bodyText = this.htmlDocument.body().text();
    for(int idx = -1; (idx = bodyText.indexOf(searchWord, idx + 1)) != -1; count++);
    return count;
}

您当前只检查一次文本是否包含搜索词,因此计数将始终为0或1。要查找总计数,请使用保持循环,同时可以使用指示开始搜索的索引的第二个参数查找字符串

public int searchForWord(String searchWord) {
    int count = 0;
    if(this.htmlDocument == null){
        System.out.println("ERROR! Call crawl() before performing analysis on the document");
    }
    System.out.println("Searching for the word " + searchWord + "...");
    String bodyText = this.htmlDocument.body().text();
    for(int idx = -1; (idx = bodyText.indexOf(searchWord, idx + 1)) != -1; count++);
    return count;
}

这里的问题是if语句正在检查文本是否包含单词以及递增的count变量。所以,即使它包含单词多次,你的逻辑基本上是这样的,如果它包含它,增加计数1。您必须重写代码以检查该单词是否多次出现。有很多方法可以实现这一点,你可以循环浏览整个正文,你可以将正文拆分成一个单词数组,然后进行检查,或者,您可以在每次找到搜索词时将其从文本中删除,并继续检查,直到它不再包含搜索词。

这里的问题是if语句正在检查文本是否包含该词以及递增的count变量。所以,即使它包含单词多次,你的逻辑基本上是这样的,如果它包含它,增加计数1。您必须重写代码以检查该单词是否多次出现。有很多方法可以做到这一点,可以循环浏览整个正文,可以将正文拆分为一个单词数组并进行检查,也可以在每次找到时从文本中删除搜索词并继续检查,直到它不再包含搜索词。

根据Java文档:

当且仅当此字符串包含指定的字符值序列时,返回true

您询问的是您要查找的单词是否包含在文档中,它确实包含在文档中

你可以:

按单词拆分文本按空格拆分文本,然后计算文本出现的次数 使用从索引0开始,然后从找到的最后一个索引开始,直到字符串结束,迭代字符串。 使用contains迭代字符串,但从某个索引开始自己执行此逻辑。
我选择第二种方法,因为它似乎是最简单的方法。

根据Java文档:

当且仅当此字符串包含指定的字符值序列时,返回true

您询问的是您要查找的单词是否包含在文档中,它确实包含在文档中

你可以:

按单词拆分文本按空格拆分文本,然后计算文本出现的次数 使用从索引0开始,然后从找到的最后一个索引开始,直到字符串结束,迭代字符串。 使用contains迭代字符串,但从某个索引开始自己执行此逻辑。
我选择第二种方法,因为这似乎是最简单的方法。

您可以使用indexOf,为最后找到的单词创建索引

public int searchForWord(String searchWord) {
    int count = 0;
    if(this.htmlDocument == null){
         System.out.println("ERROR! Call crawl() before performing analysis on the document");
    }
    System.out.println("Searching for the word " + searchWord + "...");
    String bodyText = this.htmlDocument.body().text();
    int index = 0;
    while ((index = bodyText.indexOf(searchWord, index + 1)) != -1) {
        count++;
    }
    return count;
}

您可以使用indexOf,并为最后找到的单词创建索引

public int searchForWord(String searchWord) {
    int count = 0;
    if(this.htmlDocument == null){
         System.out.println("ERROR! Call crawl() before performing analysis on the document");
    }
    System.out.println("Searching for the word " + searchWord + "...");
    String bodyText = this.htmlDocument.body().text();
    int index = 0;
    while ((index = bodyText.indexOf(searchWord, index + 1)) != -1) {
        count++;
    }
    return count;
}

非常感谢你的回答,但这不起作用。我在代码中应用了FOR循环,更新后的方法现在总是返回零。@misnomer42您能提供一个可重复的例子吗。它对我很管用:请给我几分钟。我会检查一下,也许我的代码中还有其他错误我知道问题出在哪里了。我要找的搜索词是小写的。在HTML页面上,它总是与第一个大写字母一起使用。再次感谢你的帮助。它起作用了@用词不当没问题。非常感谢你的回答,但这行不通。我申请了lo

“我的代码中的op和更新的方法现在总是返回零。@命名错误42您能提供一个可重复的示例吗?”。它对我很管用:请给我几分钟。我会检查一下,也许我的代码中还有其他错误我知道问题出在哪里了。我要找的搜索词是小写的。在HTML页面上,它总是与第一个大写字母一起使用。再次感谢你的帮助。它起作用了@用词不当没问题。非常感谢您提出的方法。我将尝试实施其中一个方案非常感谢您提出的方法。我会尝试实现其中一个,谢谢你的回答。我喜欢将文本拆分为一组单词的选项。这是个好主意。谢谢你的回答。我喜欢将文本拆分为一组单词的选项。这是一个好主意。@用词不当也许这就是你想通过这种方式寻找的东西,所有的单词都可以找到并解释为感谢更多的帮助。这是一个有趣的解决方案。但是我担心在处理大型文档时性能不佳。@用词不当也许这就是您正在寻找的那种方式,所有的单词都可以找到并解释为感谢更多的帮助。这是一个有趣的解决方案。但我担心处理大型文档时性能不佳。非常感谢您的回复!这也是一个很好的解决方案。非常感谢您的回复!这也是一个很好的解决方案。