在Java中检查字符串是否为空或null

466

我正在解析HTML数据。当要解析的单词不匹配时,String可能为null或空。

因此,我写成了这样:

if(string.equals(null) || string.equals("")){
    Log.d("iftrue", "seem to be true");
}else{
    Log.d("iffalse", "seem to be false");
}

当我删除 String.equals("") 时,它不能正确地工作。

我认为 String.equals("") 不正确。

我该如何最好地检查一个空的 String


10
这个问题比它的副本要好得多。更加简洁,措辞更好。 - Nicolas Raoul
11
更不用说它在谷歌上显示为最顶部的结果了 ☺ - nikodaemus
4
自Java 11版本开始,您可以使用String类的isBlank()方法,该方法将检查空字符串或仅包含空格的字符串。因此,您可以执行以下操作(str != null && !str.isBlank())。谢谢。 - Shivang Agarwal
如果(string == null || string.isEmpty("")) { 是正确的空值检查和改进的空字符串检查;isBlank也允许空格(制表符、空格)。注意:null.equals(...)会导致NullPointerException。 - Joop Eggen
5个回答

616

检查 null 或空字符串或仅包含空格的字符串的正确方式如下:

if(str != null && !str.trim().isEmpty()) { /* do your stuffs here */ }

55
可以使用“!=”表示null,但绝不能使用“*”来表示空字符串""。 - Hovercraft Full Of Eels
41
只是提供信息,IsEmpty()不会对仅包含空格的字符串返回true。 - bluelurker
4
这个答案的否定正是Guava的Strings.isNullOrEmpty实现方式。 - Michael Xin Sun
4
“调用isEmpty()方法来判断包含空格字符的字符串是否为空” - 这是不正确的! " " .isEmpty() 的返回值为 false - MestreLion
8
自Java 11起,str.trim().isEmpty()可以用str.isBlank()替换。 - OOP
显示剩余5条评论

418
你可以利用Apache Commons StringUtils.isEmpty(str),该方法可检查空字符串并优雅地处理null
示例:
System.out.println(StringUtils.isEmpty("")); // true
System.out.println(StringUtils.isEmpty(null)); // true

谷歌 Guava 还提供了一个类似但可能更易读的方法:Strings.isNullOrEmpty(str)

例如:

System.out.println(Strings.isNullOrEmpty("")); // true
System.out.println(Strings.isNullOrEmpty(null)); // true

顺便提一下,这个方法名有点误导人。直觉上 isEmpty(null) 应该返回 false,因为它不是一个空字符串。 - Steve Kuo
7
注意,isEmpty() 方法只是使用 "return cs == null || cs.length() == 0;" 来判断是否为空。自 commons.lang 2.0 版本以来,isEmpty() 方法不再清除字符串的空格。因此 StringUtils.isEmpty(" ") 返回 false,但 StringUtils.isBlank(" ") 返回 true。 - eze
2
@SteveKuo println(org.apache.commons.lang.StringUtils.isEmpty(null)); // true 它只返回TRUE... - Abhishek Sengupta

116
您可以使用Apache commons-lang库。 StringUtils.isEmpty(String str)检查一个字符串是否为空("")或null。
或者 StringUtils.isBlank(String str)检查一个字符串是否为空格、空(“”)或null。后者也将包含空格或特殊字符的字符串例如" "视为空。请参见java.lang.Character.isWhitespace API。

15
对于像我这样的非Java用户,请确保包含 import org.apache.commons.lang3.StringUtils; 并确保您的软件包管理器将其标记为依赖项。 - TJ Biddle
@TJBiddle。太好了!我不得不笑了,“非Java用户”因为我已经在Eclipse和AndroidStudio中使用Java编程Android多年了,但仍然需要这个提示。我从来没有理解gradle或它之前的是Java的“包管理器”。我编写应该工作的Java代码,然后开始借助StackOverflow解决依赖问题(如果有)。这次,在经历多年的“啊呀”后,我提前把“依赖放到包管理器中”,然后再写代码。(如下所示) - Stephen Hosking
为添加apache包,请在build.gradle(Module app)中输入 dependencies { implementation 'org.apache.commons:commons-text:1.7' }。如果已经有一个dependencies块,则只需插入此依赖项的新行。这是截至2020年2月的最新推荐版本(请参见https://dev59.com/1VwY5IYBdhLWcg3wPVxS#55567755)。然后清理和/或同步您的项目。 - Stephen Hosking

42
import com.google.common.base.Strings;

if(!Strings.isNullOrEmpty(String str)) {
   // Do your stuff here 
}

4
无法解析符号“Strings”。 - The incredible Jan
8
Strings(参见hari的回答)源自Guava(com.google.common.base.Strings)。 - Zlika
9
只需增加2.7 MB 的构建成本,就能获得以上所有的好处。 - DavidS
1
哦,别这样,添加库以检查 null 或空值,绝对不是这种情况。 - Sonique

37
这种方式可以检查字符串是否不为空且不为空格,也会考虑空格:

这种方式可以检查字符串是否不为null且非空,同时考虑空格:

boolean isEmpty = str == null || str.trim().length() == 0;
if (isEmpty) {
    // handle the validation
}

13
为了简单起见,应该使用str.trim().isEmpty() - DavidS
2
如果您从代码中删除 str == null,并且 str 变量为 'null',它将抛出 'NullPointerException'。 - Alfaz Jikani
1
是的,@AlfazJikani,你说得对。我是在说要用str.trim().isEmpty()替换str.trim().length() == 0,而不是删除空值检查。 - DavidS
@DavidS,我的错!我同意你的观点。 - Alfaz Jikani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接