作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Note : There is a similar question asked HERE. However, I have reviewed this question and it does not solve my problem. Please read ahead.
我写了一个方法,试图从 Elements
中删除某些链接。我知道 remove()
从它所在的 Document
ob 中删除了 Element
。但是,如何更新我的 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
。您可以在遍历列表时安全地删除元素(Elements 扩展 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 个元素。列表接口(interface)不保留空索引,所以它会在删除操作后立即重新组织元素列表,以保持牢不可破的顺序。
为您的任务使用 ListIterator
功能,它是为删除、双向迭代等目的而创建的。
关于java - 如何更新元素以使其不包含已删除的链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38489974/
我是一名优秀的程序员,十分优秀!