在数组中查找空字符串

发布于 2024-09-27 18:18:25 字数 277 浏览 3 评论 0原文

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

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

我的代码有什么问题吗?

An array of Strings, names, has been declared and initialized. Write the statements needed to determine whether any of the the array elements are null or refer to the empty String. Set the variable hasEmpty to true if any elements are null or empty-- otherwise set it to false.

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

Whats wrong with my code?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

回首观望 2024-10-04 18:18:25

如果数组的成员为 null,首先调用 trim() 将导致 NullPointerException。颠倒条件的顺序 - || 的短路性质将确保仅在真实的 String 对象上调用 trim

Calling trim() first will result in a NullPointerException should a member of the array be null. Reverse the order of the conditions - the short-circuiting nature of || will then ensure that trim is only called on a real String object.

执着的年纪 2024-10-04 18:18:25

考虑一下names[i].trim()。

names[i]是一个字符串时,你确实有像someString.trim()这样的东西,它工作得很好。

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

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

当你有 a && b,其中 ab 是表达式,检查从左到右进行,一旦问题解决,解析器就会停止。因此,对于逻辑与运算符 (&&),如果 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() 部分,并且我们不会收到错误。

Consider names[i].trim().

When names[i] is a String, you really have something like someString.trim() which works fine.

When names[i] is a null, however, you really have something like null.trim(). You've already discovered that null doesn't allow a trim() method. (In fact, I'm not even really sure what 'null' is.)

Therefore, you must check for null before you invoke trim().

When you have a && b, where a and b are expressions, the checks are made left-to-right and the parser stops as soon as the issue is settled. So for the logical and operator (&&), if a is false then b is never checked. This is what allows

if (a != null && a.trim().length() > 0) { ... }

to work. if a is null, the a.trim() part is not executed since it would be pointless from a logical point of view; the value of the conditional has been decided.

Similarly for

if (a == null || a.trim().length() == 0) { ... }

if a is null then the a.trim() part is never performed and we don't get an error.

冷心人i 2024-10-04 18:18:25

您可以使用 Apache Commons Lang 的 isBlank() 检查字符串:

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

StringUtils.isBlank 正在检查字符串是否为 null 或空(即是否等于删除所有空白字符后变为 "")。

You can use the Apache Commons Lang's isBlank() to check a String:

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

StringUtils.isBlank is checking if the String is null or empty (i.e. if it is equals to "" when all blank characters are removed).

So要识趣 2024-10-04 18:18:25

它抛出一个空指针异常,因为你试图在一个空对象上运行一个方法:

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

所以,只要names[]有一个空的名称,它就会抛出异常。解决该问题的一种方法是切换 if 语句中的布尔语句:

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

It's throwing a Null Pointer Exception because you're trying to run a method on a null object:

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

So, anytime that names[] has ONE name that's null, it will throw the exception. One way to solve the problem is to switch the boolean statements in this if statement:

if (names[i]==null || names[i].trim().equals(""))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文