【发布时间】:2019-10-11 13:42:56
【问题描述】:
我正在开发一个需要从文档中删除元素的应用程序。
for(Element d : doc.getAllElements()){
if(condition){
d.getAllElements().remove();
}
}
在这样做时,我不断得到
Exception in thread "main" java.lang.IllegalArgumentException: Object must not be null
到目前为止,我已经检查了各种 null 条件,例如 if(d != null) 等,但似乎没有一个有效。你能建议什么应该是解决方案吗?
更新: 假设我有两个循环,其中我在满足条件时删除元素。 下面的代码只是示例,请不要建议解决方法,例如在第一个条件下中断循环等,我需要在逻辑层面上理解它。
for(Element e: doc.getAllElements()){
if(condition1 == true)
{
e.getAllElements().remove();
}
if(condition2 == true){
e.getAllElements().remove();
}
}
如果两个条件都满足,则在第一个循环中删除元素,当遇到第二个条件时,它会抛出非法异常。我试图评估问题,发现 JSoup 在内部检查元素是否不为空,如果是,则抛出异常。考虑场景:
if(e != null) // e is an Element.
在上面的空检查中,JSoup 检查 e 的存在,在这种情况下它是空的,因此在进入下一个单词之前是异常的!=空。我检查了文档,发现有一个方法存在 Validation.notNull(Element),但它返回 void。是否可以从中获得布尔返回值?还有什么解决办法?
【问题讨论】:
-
行是什么?显示完整的堆栈跟踪。
-
是的,我已经检查过了,它是同一行,每当我尝试 d.(somemethod) 时,它都会抛出相同的异常,因为它已经在之前的某个循环中被删除了。
-
提供更多代码。现在有点难以理解这个问题。