我正在编写一个程序,其中给出页面的路径以及提及下一页的标签的名称类。
这是我尝试过的代码:
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/