gpt4 book ai didi

java - 如何更新元素以使其不包含已删除的链接?

转载 作者:行者123 更新时间:2023-11-30 08:35:01 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com