我编写的代码可以提取网页上的所有链接。我检查Arraylist以防止出现相同的链接。但是如果网站上的链接太多,我会收到stackoverflow错误。我在Arraylist中保留链接供以后使用。如何避免此stackoverflow错误? 这个问题的原因可能是arraylist吗?
static ArrayList<String> linkleriTut = new ArrayList();
public void linkleriCek(String url, String taramaTuru) throws IOException{
try {
Document doc = Jsoup.connect(url).get();
Elements linkler = doc.select("a[href]");
for (Element link : linkler) {
if (!linkleriTut.contains(link.attr("abs:href"))) {
linkleriTut.add(link.attr("abs:href"));
}
}
}
}
catch (Exception e) {
}
if (taramaTuru.equals("Detaylı Tarama")) {
while (k < linkleriTut.size()) {
k++;
linkleriCek(linkleriTut.get(k), taramaTuru);
}
}
答案 0 :(得分:1)
当taramaTuru是DetaylıTarama时
if (taramaTuru.equals("Detaylı Tarama"))
永远都是真的。
因此,linkleriTut
中的每个条目都会再次调用linkleriCek(linkleriTut.get(k), taramaTuru)
这将在初始循环之后再次看到(taramaTuru.equals("Detaylı Tarama")) == true
,因此您的方法会一次又一次地调用自身,从而导致StackOverFlowError