Java 在Jsoup中,如何在迭代期间更改/拆分节点
我有html文件与文件。在解析期间,我将拆分textnode,这会导致并发修改错误 样本含量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
<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 .........
}
}
}