[英]Cleanest way to assign to a variable if an element in jsoup is defined?
我正在执行此String name = doc.select("h1#name").first().text();
并且在“ h1#name”元素不存在的页面上收到了NullPointerException。 我正在解析DOM,获取了数百个元素。 似乎我需要在分配每个元素之前对其进行测试,因此我将其更改为:
String name = null;
if( doc.select("h1#name").first() != null && doc.select("h1#name").first().text() != null ))
name = doc.select("h1#name").first.text();
有更好的方法吗? 我只是在学习Java,而我的背景是Perl,在那儿我会做这样的事情:
my $name = $doc->select("h1#name")->text if $doc->select("h1#name");
没什么大不了的,因为我的代码确实对我有用。 我只是想知道在Java中是否有更干净的方法可以做到这一点。
您将不会检查所有要访问的对象以访问所需的值。
要将您的perl语法转换为java,我将使用三元运算符 :
name = doc.select("h1#name").first() != null ?
doc.select("h1#name").first().text() : null
也无需检查doc.select("h1#name).first().text() != null
除非您的名称中包含非null值并且您不想使用null覆盖它。
我会建议一种实用程序方法,如下所示:
Document mDocument;
(...)
String getElementTextOrNull (String cssQuery) {
Element e = mDocument.select(cssQuery).first();
if (e == null) {
return null;
} else {
return e.text();
}
}
然后,您可以消除很多样板和重复,因此您的代码将变成:
String name = getElementTextOrNull("h1#name");
您还可以使用该方法执行其他操作,例如检查文本是否为空或有效。
当然,如果仅一次获取特定元素的文本,这可能是不切实际的,但这是我不建议的。 就我个人而言,我也认为这比另一个答案中提出的三元运算符解决方案更简洁,更简洁。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.