StringUtils.isBlank()与String.isEmpty()


215

我遇到了一些包含以下内容的代码:

String foo = getvalue("foo");
if (StringUtils.isBlank(foo))
    doStuff();
else
    doOtherStuff();

这在功能上似乎等同于以下内容:

String foo = getvalue("foo");
if (foo.isEmpty())
    doStuff();
else
    doOtherStuff();

两者(org.apache.commons.lang3.StringUtils.isBlankjava.lang.String.isEmpty)有区别吗?


7
可能值得一提的是,还有一个StringUtils.isEmpty(foo)可以帮助您避免使用空指针,就像一样isBlank,但它不会检查空格字符。
Xavi 2014年

Answers:


380

StringUtils.isBlank()检查字符串的每个字符是否为空格字符(或字符串为空或为空)。这与仅检查字符串是否为空完全不同。

从链接的文档中:

检查字符串是否为空格,空(“”)或null。

 StringUtils.isBlank(null)      = true
 StringUtils.isBlank("")        = true  
 StringUtils.isBlank(" ")       = true  
 StringUtils.isBlank("bob")     = false  
 StringUtils.isBlank("  bob  ") = false

为了比较StringUtils.isEmpty

 StringUtils.isEmpty(null)      = true
 StringUtils.isEmpty("")        = true  
 StringUtils.isEmpty(" ")       = false  
 StringUtils.isEmpty("bob")     = false  
 StringUtils.isEmpty("  bob  ") = false

警告:在java.lang.String中 .isBlank()和java.lang.String中 .isEmpty()的工作方式相同,除了他们不返回truenull

java.lang.String.isBlank()

java.lang.String.isEmpty()


135

@arshajii接受的答案是完全正确的。但是,只需在下面说清楚一点,

StringUtils.isBlank()

 StringUtils.isBlank(null)      = true
 StringUtils.isBlank("")        = true  
 StringUtils.isBlank(" ")       = true  
 StringUtils.isBlank("bob")     = false  
 StringUtils.isBlank("  bob  ") = false

StringUtils.isEmpty

 StringUtils.isEmpty(null)      = true
 StringUtils.isEmpty("")        = true  
 StringUtils.isEmpty(" ")       = false  
 StringUtils.isEmpty("bob")     = false  
 StringUtils.isEmpty("  bob  ") = false


14

StringUtils.isBlank() 还将检查null,而这是:

String foo = getvalue("foo");
if (foo.isEmpty())

将抛出NullPointerExceptionif foo为null。


4
两者之间的差异更大。看我的答案。
arshajii 2014年

3
这是不正确的。如果为null,则String.isEmpty()将返回true。至少如果您正在谈论apache.commons.lang版本。我不确定春季版本。
ryoung 2015年

1
我的评论的意思已被删除(公平地说,从一开始它可能会更加清楚);我是不是比较StringUtils.isBlank()来StringUtils.isEmpty() -而StringUtils.isBlank()到OP的value.isEmpty()
chut

1
chut的答案是正确的。如果java String foo为null,则foo.isEmpty()抛出NullPointerException。即使foo为null,Apache StringUtils.isBlank(foo)也会返回true。
user2590805 '18 -10-5

6

StringUtils.isBlank也返回true仅空格:

isBlank(String str)

检查字符串是否为空格,空(“”)或null。


5

StringUtils.isBlank(foo)将为您执行空检查。如果执行foo.isEmpty()并且foo为null,则将引发NullPointerException。


两者之间的差异更大。看我的答案。
arshajii 2014年

2

StringUtils.isBlank()对于空格(仅空白)和null字符串也返回true。实际上,它会修剪Char序列,然后执行检查。

当String参数中没有字符序列或String参数为null时,StringUtils.isEmpty()返回true。区别在于,如果String参数仅包含whiltespaces,则isEmpty()返回false。它将空白视为非空状态。


2

isBlank()和isEmpty()之间的唯一区别是:

StringUtils.isBlank(" ")       = true //compared string value has space and considered as blank

StringUtils.isEmpty(" ")       = false //compared string value has space and not considered as empty

1
public static boolean isEmpty(String ptext) {
 return ptext == null || ptext.trim().length() == 0;
}

public static boolean isBlank(String ptext) {
 return ptext == null || ptext.trim().length() == 0;
}

两者都具有相同的代码,isBlank如何处理空白,也许您的意思是isBlankString,该代码具有用于处理空白的代码。

public static boolean isBlankString( String pString ) {
 int strLength;
 if( pString == null || (strLength = pString.length()) == 0)
 return true;
 for(int i=0; i < strLength; i++)
 if(!Character.isWhitespace(pString.charAt(i)))
 return false;
 return false;
}

1

代替使用第三方库,使用Java 11 isBlank()

    String str1 = "";
    String str2 = "   ";
    Character ch = '\u0020';
    String str3 =ch+" "+ch;

    System.out.println(str1.isEmpty()); //true
    System.out.println(str2.isEmpty()); //false
    System.out.println(str3.isEmpty()); //false            

    System.out.println(str1.isBlank()); //true
    System.out.println(str2.isBlank()); //true
    System.out.println(str3.isBlank()); //true

-2

我正在回答这个问题,因为它是Google中“ String isBlank()方法”的最高结果。

如果您使用的是Java 11或更高版本,则可以使用String类isBlank()方法。此方法与Apache Commons StringUtils类具有相同的作用。

我已经写了一篇有关此方法示例的小文章,请在此处阅读。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.