Java: compruebe si la cadena es nula, vacía o en blanco

En este tutorial, veremos cómo verificar si una cadena es nula, vacía o en blanco en Java, usando String.isEmpty(), String.equals() y Apache Commons, con ejemplos.

Introducción

En Java, hay una clara diferencia entre cadenas null, vacías y en blanco.

  • Una cadena vacía es un objeto String con un valor asignado, pero su longitud es igual a cero.
  • Una cadena nula no tiene ningún valor.
  • Una cadena en blanco contiene solo espacios en blanco, no está vacía ni es nula, ya que tiene un valor asignado y no tiene una longitud 0.
1
2
3
String nullString = null;
String emptyString = "";
String blankString = " ";

En este tutorial, veremos cómo verificar si una cadena es nula, vacía o en blanco en Java.

Usando la longitud de la cadena

Como se mencionó anteriormente, una cadena está vacía si su longitud es igual a cero. Usaremos el método longitud(), que devuelve el número total de caracteres en nuestra cadena.

1
2
3
4
5
6
String blankString = " ";

if(blankString == null || blankString.length() == 0)
    System.out.println("This string is null or empty");
else
    System.out.println("This string is neither null nor empty");

El código anterior producirá el siguiente resultado:

1
This string is null or empty

La cadena está en blanco, por lo que obviamente no es ni nula ni está vacía. Ahora, basándonos solo en la longitud, no podemos realmente diferenciar entre Cadenas que solo contienen espacios en blanco o cualquier otro carácter, ya que un espacio en blanco es un Carácter.

Nota: Es importante hacer la comprobación nula primero, ya que el operador OR de cortocircuito || se romperá inmediatamente en la primera condición verdadera. Si la cadena, de hecho, es null, todas las demás condiciones anteriores generarán una NullPointerException.

Uso del método isEmpty()

El método isEmpty() devuelve verdadero o falso dependiendo de si nuestra cadena contiene texto o no. Es fácilmente encadenable con una verificación string == null, e incluso puede diferenciar entre cadenas en blanco y vacías:

1
2
3
4
5
6
String string = "Hello there";

if (string == null || string.isEmpty() || string.trim().isEmpty()) 
    System.out.println("String is null, empty or blank.");
else
    System.out.println("String is neither null, empty nor blank");

El método trim() elimina todos los espacios en blanco a la izquierda y derecha de una cadena y devuelve la nueva secuencia. Si la cadena está en blanco, después de eliminar todos los espacios en blanco, estará vacío, por lo que isEmpty() devolverá true.

Ejecutar este fragmento de código nos dará el siguiente resultado:

1
String is neither null, empty nor blank

Usando el método equals()

El método equals() compara las dos cadenas dadas en función de su contenido y devuelve verdadero si son iguales o falso si no lo son:

1
2
3
4
5
6
String string = "Hello there";

if(string == null || string.equals("") || string.trim().equals(""))
    System.out.println("String is null, empty or blank");
else
    System.out.println("String is neither null, empty nor blank");

De la misma manera que antes, si la cadena recortada es "", estaba vacía desde el principio o era una cadena en blanco con 0..n espacios en blanco:

1
String is neither null, empty nor blank

Usando la clase StringUtils

Apache Commons es una biblioteca popular de Java que proporciona más funciones. StringUtils es una de las clases que ofrece Apache Commons. Esta clase contiene métodos usados ​​para trabajar con Strings, similar a java.lang.String.

Si no está familiarizado con las clases auxiliares de Apache Commons, le sugerimos leer nuestra Guía de la clase StringUtils.

Ya que usaremos Apache Commons para este enfoque, agréguelo como una dependencia:

1
2
3
4
5
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.11</version>
</dependency>

O, si estás usando Gradle:

1
compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.11'

Una de las diferencias clave entre los métodos StingUtils y String es que todos los métodos de la clase StringUtils son seguros contra nulos. Además, proporciona algunos métodos que podemos aprovechar para esto, incluidos StringUtils.isEmpty() y StringUtils.isBlank():

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
String nullString = null;

if(nullString == null) {
    System.out.println("String is null");
}
else if(StringUtils.isEmpty(nullString)) {
    System.out.println("String is empty");
}
else if(StringUtils.isBlank(nullString)) {
    System.out.println("String is blank");
}

La salida será:

1
String is null

Además de estos, también existen sus métodos inversos: StringUtils.isNotEmpty() y StringUtils.isNotBlank(), sin embargo, puede lograr la misma funcionalidad usando el operador NOT (!):

1
2
3
4
5
6
7
if(StringUtils.isNotEmpty(""))
    System.out.println("String is not empty");
    
// Equivalent to

if(!StringUtils.isEmpty(""))
    System.out.println("String is not empty");

Conclusión

Una cadena es un objeto que representa una secuencia de caracteres. Java proporciona muchos métodos diferentes para la manipulación de cadenas. En este artículo, hemos utilizado algunos de estos métodos como isEmpty(), equals(), StringUtils.isEmpty() y length() para verificar si String es null, vacío o en blanco.