Java 在Jsoup中,如何在迭代期间更改/拆分节点

Java 在Jsoup中,如何在迭代期间更改/拆分节点,java,regex,jsoup,Java,Regex,Jsoup,我有html文件与文件。在解析期间,我将拆分textnode,这会导致并发修改错误 样本含量 <div id="abc"><br>---- The email address is abc@abc.com</b> contains abc domain email address <br></div> 请帮助我解决此问题。导致此问题的原因是您在遍历节点时将节点添加到节点ele。这是非法的,这就是java.util.Concurre

我有html文件与文件。在解析期间,我将拆分textnode,这会导致并发修改错误

样本含量

 <div id="abc"><br>---- The email address is abc@abc.com</b> contains abc
 domain email address <br></div>

请帮助我解决此问题。

导致此问题的原因是您在遍历节点时将节点添加到
节点ele
。这是非法的,这就是
java.util.ConcurrentModificationException
的含义

您可以将要处理的节点存储在(Node child:ele.childNodes())的循环
中,然后可以在另一个循环中进行修改

private void processInContent(Node ele) {
    String text = "";        

    ArrayList<Node> toReplace = new ArrayList<Node>();
    for (Node child : ele.childNodes()) {            
        Node parentNode = child.parentNode();
        if (child instanceof TextNode && !("a").equalsIgnoreCase(parentNode.nodeName())) {
            toReplace.add(child);
        }
    }
    for (Node child : toReplace){
        TextNode childText = (TextNode) child;
        text = childText.text();
        Matcher m = pattern .matcher(text);
        while (m.find()) {
            // more code .........
            Element anchorEle = ele.ownerDocument().createElement("a");
            // more code .........
        }
    }
}
private void processInContent(节点ele){
字符串文本=”;
ArrayList toReplace=新的ArrayList();
对于(节点子节点:ele.childNodes()){
节点parentNode=child.parentNode();
if(TextNode&((“a”).equalsIgnoreCase(parentNode.nodeName())的子实例){
toReplace.add(child);
}
}
对于(节点子节点:toReplace){
TextNode childText=(TextNode)子节点;
text=childText.text();
Matcher m=模式匹配器(文本);
while(m.find()){
//更多代码。。。。。。。。。
Element anchorEle=ele.ownerDocument().createElement(“a”);
//更多代码。。。。。。。。。
}
}
}
此代码不会抛出
ConcurrentModificationException

希望能有帮助

java.util.ConcurrentModificationException
        at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
        at java.util.AbstractList$Itr.next(AbstractList.java:343)
        at java.util.Collections$UnmodifiableCollection$1.next(Collections.java:1008)
        at JSOUPParse.processInContent(JSOUPParse.java:253)
        at JSOUPParse.main(JSOUPParse.java:318)
private void processInContent(Node ele) {
    String text = "";        

    ArrayList<Node> toReplace = new ArrayList<Node>();
    for (Node child : ele.childNodes()) {            
        Node parentNode = child.parentNode();
        if (child instanceof TextNode && !("a").equalsIgnoreCase(parentNode.nodeName())) {
            toReplace.add(child);
        }
    }
    for (Node child : toReplace){
        TextNode childText = (TextNode) child;
        text = childText.text();
        Matcher m = pattern .matcher(text);
        while (m.find()) {
            // more code .........
            Element anchorEle = ele.ownerDocument().createElement("a");
            // more code .........
        }
    }
}