通过数组查找空字符串

时间:2010-10-17 02:13:42

标签: java arrays string null

已声明并初始化了一个字符串数组。编写确定是否有任何数组元素为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;

我的代码出了什么问题?

4 个答案:

答案 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,其中ab是表达式,则检查是从左到右进行的,解析器会在问题解决后立即停止。因此,对于逻辑和运算符(&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(""))