Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在数组中查找空字符串_Java_Arrays_String_Null - Fatal编程技术网

Java 在数组中查找空字符串

Java 在数组中查找空字符串,java,arrays,string,null,Java,Arrays,String,Null,已声明并初始化了字符串(名称)数组。编写确定任何数组元素是否为null或引用空字符串所需的语句。如果任何元素为null或空,则将变量hasEmpty设置为true,否则将其设置为false hasEmpty=false; for (int i=0;i<names.length;i++) if (names[i].trim().equals("") || names[i]==null) hasEmpty=true; hasEmpty=false; 对于(int i=

已声明并初始化了字符串(名称)数组。编写确定任何数组元素是否为null或引用空字符串所需的语句。如果任何元素为null或空,则将变量hasEmpty设置为true,否则将其设置为false

   hasEmpty=false;
   for (int i=0;i<names.length;i++)
   if (names[i].trim().equals("") || names[i]==null)
   hasEmpty=true;
hasEmpty=false;

对于(int i=0;i首先调用
trim()
将导致NullPointerException,如果数组的一个成员为
null
。颠倒条件的顺序-
|
的短路性质将确保
trim
仅在实际字符串对象上调用。

考虑
名称[i].trim()

names[i]
是一个字符串时,实际上有类似
someString.trim()
的东西可以正常工作

然而,当
names[i]
为null时,实际上有类似于
null.trim()
的东西。您已经发现null不允许trim()方法。(事实上,我甚至不确定“null”是什么。)

因此,在调用trim()之前必须检查null

当您有
a和
,其中
a和
b
是表达式时,检查从左到右进行,解析器在问题解决后立即停止。因此对于逻辑and运算符(&&),如果
a
为false,则从不检查
b
。这是允许的

if (a != null && a.trim().length() > 0) { ... }
如果
a
为空,则不会执行a.trim()部分,因为从逻辑角度来看,它是无意义的;条件值已确定

同样适用于

if (a == null || a.trim().length() == 0) { ... }
如果
a
为空,则永远不会执行a.trim()部分,并且不会出现错误。

您可以使用检查字符串:

if (StringUtils.isBlank(names[i]) {
    ...
}

StringUtils.isBlank
正在检查字符串是否为
null
或空(即,当删除所有空白字符时,它是否等于

它引发空指针异常,因为您试图在空对象上运行方法:

if (names[i].trim().equals("") || names[i]==null)
因此,只要names[]有一个名称为null,它就会抛出异常。解决此问题的一种方法是切换此if语句中的布尔语句:

if (names[i]==null || names[i].trim().equals(""))

@科林:编辑了什么?我添加了家庭作业标签,因为这看起来像是家庭作业。如果不是,那就是我的错误。但是看看你的问题历史,我认为你需要花更多的时间自己学习,少一点问每件事。如果你自己花时间去解决其中的一些问题,你可能会最后,我会更好地理解它。我只是问我是否花了太多的时间在上面。我收到的大多数答案都是我自己永远不会想到的东西。比如在使用trim之前检查null。即使我花了几个小时在上面,我也永远不会想到。我想你可能已经想到了。实际上,这段代码失败了即使没有trim(),所以即使我有名字[I].equals(“”),它也失败了,所以我可能不会弄明白它。“事实上,我甚至不太确定‘null’是什么。”-看到了,呵呵,我一发帖就马上查到了。这和我想的差不多,但读起来很好。