我正在编写一个程序,我在其中提供了一个页面路径和一个标记的名称类,提到了下一页。
这是我尝试过的代码:
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
我想创建一个递归方法,循环直到得到分页的所有链接。 提前谢谢。
答案 0 :(得分:1)
你的递归函数将继续运行,这会使你的程序耗尽堆栈内存并崩溃,如果它没有因为没有找到一个元素而崩溃,而是依赖于在一个案例中捕获异常这样的感觉不是一个好主意。
在进行递归循环时,它必须返回结果,如果"完成"则不再调用函数本身。 也就是说,如果没有更多数据需要处理,那么应该完成,现在你将继续运行循环,直到它崩溃。
我不确定你希望你的方法如何工作,但老实说,在这种情况下,你似乎并不需要递归,我建议只使用正常的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"尝试获取它之前的属性,如果没有,则返回该点。
此外,您不必从函数返回字符串,因为您对结果不执行任何操作。将其更改为无效,并在应该返回时将其更改为return;
。