StringUtils.isBlank () vs String.isEmpty ()

215

Encontrei um código com o seguinte:

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

Isso parece ser funcionalmente equivalente ao seguinte:

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

Existe uma diferença entre os dois ( org.apache.commons.lang3.StringUtils.isBlanke java.lang.String.isEmpty)?

NSA
fonte
7
Vale a pena mencionar que também existe um StringUtils.isEmpty(foo)que ajuda a evitar ponteiros nulos, assim como isBlank, mas não verifica caracteres em branco.
Xavi

Respostas:

380

StringUtils.isBlank()verifica se cada caractere da string é um espaço em branco (ou se a string está vazia ou se é nula). Isso é totalmente diferente do que apenas verificar se a string está vazia.

Na documentação vinculada:

Verifica se uma String é um espaço em branco, vazio ("") ou nulo.

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

Para comparação StringUtils.isEmpty :

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

Aviso: Em java.lang.String .isBlank () e java.lang.String .isEmpty () funcionam da mesma forma, exceto que eles não voltar truepara null.

java.lang.String.isBlank()

java.lang.String.isEmpty()

arshajii
fonte
135

A resposta aceita de @arshajii está totalmente correta. No entanto, apenas sendo mais explícito, dizendo abaixo,

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
nilesh
fonte
14

StringUtils.isBlank() também verificará nulo, enquanto isso:

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

jogará um NullPointerExceptionif fooé nulo.

chut
fonte
4
Há uma diferença maior que isso; veja minha resposta.
Arshajii
3
Isto está incorreto. String.isEmpty () retornará true se for nulo. Pelo menos se você estiver falando sobre a versão apache.commons.lang. Não tenho certeza da versão do Spring.
ryoung
1
O significado do meu comentário foi editado (para ser justo, poderia ter sido mais claro desde o início); Eu não estava comparando StringUtils.isBlank () para StringUtils.isEmpty () - em vez StringUtils.isBlank () para o OP value.isEmpty ()
chut
1
a resposta de chut está correta. Se java String foo for nulo, foo.isEmpty () lança NullPointerException. O apache StringUtils.isBlank (foo) retorna true mesmo se foo for nulo.
usar o seguinte comando
6

StringUtils.isBlanktambém retorna truepor apenas espaço em branco:

isBlank (String str)

Verifica se uma String é um espaço em branco, vazio ("") ou nulo.

Octavia Togami
fonte
5

StringUtils.isBlank(foo)executará uma verificação nula para você. Se você executar foo.isEmpty()e foofor nulo, você gerará uma NullPointerException.

Padrão
fonte
Há uma diferença maior que isso; veja minha resposta.
Arshajii
2

StringUtils.isBlank () retorna true para espaços em branco (apenas espaços em branco) e também para String nula. Na verdade, apara as seqüências Char e executa a verificação.

StringUtils.isEmpty () retorna true quando não há charsequence no parâmetro String ou quando o parâmetro String é nulo. A diferença é que isEmpty () retorna false se o parâmetro String contiver apenas espaços em branco. Ele considera os espaços em branco como um estado de não estar vazio.

user4555388
fonte
2

A única diferença entre isBlank () e 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
disha4mourya
fonte
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;
}

Ambos têm o mesmo código, como o isBlank lidará com espaços em branco, provavelmente você quis dizer isBlankString, este possui o código para lidar com espaços em branco.

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;
}
Apoorva Dhanvanthri
fonte
1

Em vez de usar lib de terceiros, use 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
Ravthiru
fonte
-2

Estou respondendo a isso porque é o principal resultado no Google para "String isBlank () Method".

Se você estiver usando Java 11 ou superior, poderá usar o método isBlank () da classe String . Esse método faz a mesma coisa que a classe Apache Commons StringUtils.

Eu escrevi um pequeno post sobre exemplos deste método, leia-o aqui .

Pankaj
fonte