StringUtils.isBlank () vs String.isEmpty ()

215

Me encontré con un código que tiene lo siguiente:

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

Esto parece ser funcionalmente equivalente a lo siguiente:

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

Hay una diferencia entre los dos ( org.apache.commons.lang3.StringUtils.isBlankyjava.lang.String.isEmpty )?

NSA
fuente
77
Vale la pena mencionar que también hay una StringUtils.isEmpty(foo)que le ayuda a evitar punteros nulos isBlank, pero no busca caracteres de espacio en blanco.
Xavi

Respuestas:

380

StringUtils.isBlank()comprueba que cada carácter de la cadena es un espacio en blanco (o que la cadena está vacía o que es nula). Esto es totalmente diferente a solo verificar si la cadena está vacía.

De la documentación vinculada:

Comprueba si una cadena es un espacio en blanco, vacío ("") o nulo.

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

Para comparar StringUtils.isEmpty :

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

Advertencia: en java.lang.String .isBlank () y java.lang.String .isEmpty () funcionan igual, excepto que no regresan truepor null.

java.lang.String.isBlank()

java.lang.String.isEmpty()

arshajii
fuente
135

La respuesta aceptada de @arshajii es totalmente correcta. Sin embargo, siendo más explícito al decir a continuación,

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
fuente
14

StringUtils.isBlank() también verificará nulo, mientras que esto:

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

arrojará un NullPointerExceptionif si fooes nulo.

chut
fuente
44
Hay una diferencia más grande que eso; mira mi respuesta
arshajii
3
Esto es incorrecto. String.isEmpty () devolverá verdadero si es nulo. Al menos si estás hablando de la versión apache.commons.lang. No estoy seguro acerca de la versión Spring.
ryoung
1
El significado de mi comentario fue eliminado (para ser justos, podría haber sido más claro desde el principio); Yo no estaba comparando StringUtils.isBlank () para StringUtils.isEmpty () - en lugar StringUtils.isBlank () para el OP value.isEmpty ()
chut
1
La respuesta de Chut es correcta. Si java String foo es nulo, foo.isEmpty () lanza NullPointerException. Apache StringUtils.isBlank (foo) devuelve verdadero incluso si foo es nulo.
user2590805
6

StringUtils.isBlanktambién regresa truesolo para espacios en blanco:

isBlank (String str)

Comprueba si una cadena es un espacio en blanco, vacío ("") o nulo.

Octavia Togami
fuente
5

StringUtils.isBlank(foo)realizará una verificación nula por usted. Si realiza foo.isEmpty()y fooes nulo, generará una NullPointerException.

Defecto
fuente
Hay una diferencia más grande que eso; mira mi respuesta
arshajii
2

StringUtils.isBlank () devuelve verdadero para espacios en blanco (solo espacios en blanco) y también para String nulo. En realidad, recorta las secuencias de Char y luego realiza la comprobación.

StringUtils.isEmpty () devuelve verdadero cuando no hay secuencia en el parámetro String o cuando el parámetro String es nulo. La diferencia es que isEmpty () devuelve falso si el parámetro String contiene solo espacios en blanco. Considera los espacios en blanco como un estado de no estar vacío.

usuario4555388
fuente
2

La única diferencia entre isBlank () y isEmpty () es:

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
fuente
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 tienen el mismo código, ¿cómo manejará isBlank los espacios en blanco? Probablemente se refería a 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;
}
Apoorva Dhanvanthri
fuente
1

En lugar de usar lib de terceros, 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
fuente
-2

Estoy respondiendo esto porque es el principal resultado en Google para el "Método String isBlank ()".

Si está utilizando Java 11 o superior, puede utilizar el método de clase de cadena isBlank () . Este método hace lo mismo que la clase Apache Commons StringUtils.

He escrito una pequeña publicación sobre ejemplos de este método, léalo aquí .

Pankaj
fuente