注意:有一个类似的问题问这里。但是,我已经审查了这个问题,它不能解决我的问题。请提前阅读。
我编写了一种方法,试图从中删除某些链接Elements
。我了解这remove()
会Element
从Document
所在的ob删除。但是,如何更新我的目录Elements
,使其不包含已删除的链接?
下面是我的方法。
public void getLinks(Document site) {
Elements links = site.select("a[href]");
for(int i = 0 ; i < links.size() ; i++) {
String url = links.get(i).attr("abs:href");
if(url.endsWith("~S1")) {
System.out.println(url);
} else {
links.remove(i); // links still contains removed Element
}
}
}
我建议你用listIterator
。您可以在遍历列表时安全地删除元素(元素扩展了ArrayList类)
ListIterator<Element> it = links.listIterator();
while(it.hasNext()){
Element link = it.next();
String url = links.get(i).attr("abs:href");
if(... {// your condition. I can't properly copy, writing from a mobile phone
link.remove();
}
}
请记住,在通过公共for
运算符进行迭代时,从列表中删除元素并不安全。由于重新索引。例如,您删除了第5个元素,循环计数器增加了1,则要删除第6个元素,而要删除第7个元素。List接口不会保留空索引,因此它将在删除操作后立即重新组织元素列表,以保持牢不可破的顺序。
用于您的任务ListIterator
功能,此功能是出于删除,双向迭代等目的而创建的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句