java - 递归函数不起作用

标签 java recursion jsoup

我正在编写一个程序,其中给出页面的路径以及提及下一页的标签的名称类。

这是我尝试过的代码:

public String pagination_get_link(String path, String pagnNextLink_tag) throws IOException{
        Document doc = Jsoup.parse(new File(path), "UTF-8");
        Element url = doc.getElementById(pagnNextLink_tag);
        String url_s = url.attr("href");
        pagination_get_link(url_s,pagnNextLink_tag);

        return url_s;

    }

页面示例是这样的: enter link description here

我想做一个递归方法,循环直到获得分页的所有链接。 提前致谢。

最佳答案

你的递归函数将永远继续运行,这应该会让你的程序耗尽堆栈内存并崩溃,如果它没有因为找不到元素而崩溃,但在这种情况下依赖于捕获异常感觉不是个好主意。

当进行递归循环时,它必须返回结果,并且如果“完成”则不能再次调用函数本身。
也就是说,如果没有更多的数据需要处理,就应该完成,现在您将继续运行循环直到它崩溃。

我不太确定你希望你的方法如何工作,但老实说,在这种情况下你似乎并不真正需要递归,我建议只使用普通的 while 循环或类似的循环。

<小时/>

编辑:

如果您确实想使用递归代码,请在调用函数之前返回,如果 url_s是空的应该可以解决问题,比如......

public String pagination_get_link(String path, String pagnNextLink_tag) throws IOException{
    Document doc = Jsoup.parse(new File(path), "UTF-8");
    Element url = doc.getElementById(pagnNextLink_tag);
    String url_s = url.attr("href");
    // Not sure how to check if its empty, so change it to what you need.
    if(url_s == "") { 
      return "";
    }
    pagination_get_link(url_s,pagnNextLink_tag);

    return url_s;
}

现在,当您尝试通过 ID 或类似内容获取元素时,它可能会抛出异常,在这种情况下,我宁愿在尝试获取元素之前检查该元素是否存在以及它是否具有“href”属性,如果没有,就在此时返回。

此外,您不必从函数返回字符串,因为您不对结果执行任何操作。将其更改为 void 并只是 return;应该什么时候返回。

关于java - 递归函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39435001/

相关文章:

java - 使用 Pattern.LITERAL 是否与 Pattern.quote 相同?

python - 函数的返回值是none

javascript - 在javascript中真的需要提升来启用相互递归吗?

javascript - 当我使用 jsoup 或 htmlunit 获取页面时 href 字段丢失

java - 将 XPath 转换为 CSS 选择器

java - 在java中重命名文件

App Engine 中的 Java 小程序

java - Jsoup无法打开html页面Status=-1

java - 我无法让我的 java 程序打印结果

javascript - 不懂JS递归