已声明并初始化了一个字符串数组。编写确定是否有任何数组元素为null或引用空String所需的语句。如果任何元素为null或为空,则将变量hasEmpty设置为true - 否则将其设置为false。
hasEmpty=false;
for (int i=0;i<names.length;i++)
if (names[i].trim().equals("") || names[i]==null)
hasEmpty=true;
我的代码出了什么问题?
答案 0 :(得分:2)
如果数组的成员为trim()
,则首先调用null
将导致NullPointerException。颠倒条件的顺序 - ||
的短路特性将确保仅在真实的String对象上调用trim
。
答案 1 :(得分:0)
考虑names[i].trim()
。
当names[i]
是一个字符串时,你真的有someString.trim()
这样的东西可以正常工作。
但是,当names[i]
为空时,您确实有null.trim()
之类的内容。您已经发现null不允许使用trim()方法。 (事实上,我甚至不确定'null'是什么。)
因此,在调用trim()之前必须检查null。
如果您有a && b
,其中a
和b
是表达式,则检查是从左到右进行的,解析器会在问题解决后立即停止。因此,对于逻辑和运算符(&amp;&amp;),如果a
为false,则永远不会检查b
。这是允许的
if (a != null && a.trim().length() > 0) { ... }
上班。如果a
为null,则不执行a.trim()部分,因为从逻辑的角度来看它是没有意义的;条件的价值已经确定。
同样适用于
if (a == null || a.trim().length() == 0) { ... }
如果a
为null,那么a.trim()部分永远不会执行,我们也不会收到错误。
答案 2 :(得分:0)
您可以使用Apache Commons Lang's isBlank()检查字符串:
if (StringUtils.isBlank(names[i]) {
...
}
StringUtils.isBlank
正在检查字符串是null
还是空(即如果删除所有空白字符时它等于""
)。
答案 3 :(得分:0)
它正在抛出一个Null Pointer Exception,因为你试图在null对象上运行一个方法:
if (names[i].trim().equals("") || names[i]==null)
因此,只要name []的一个名称为null,它就会抛出异常。解决问题的一种方法是在if语句中切换布尔语句:
if (names[i]==null || names[i].trim().equals(""))