HOWTO · Java

Representar caracteres vacíos en Java

Este artículo presenta cómo manejar caracteres vacíos en Java.

En esta página

Java no tiene un char primitivo vacío: un char almacena una unidad de código UTF-16. El literal '' no es válido porque no contiene ningún carácter. Sí es posible crear un char[] vacío, pero es un arreglo con cero elementos, no un valor char. Si no hay texto, usa un String vacío; si necesitas un valor de carácter, elige un carácter real, como un espacio o U+0000.

Por qué '' no es válido y un espacio es diferente

Un literal char usa comillas simples y contiene un carácter. La expresión char ch = ''; no compila. En cambio, ' ' es un char válido que contiene un espacio. Este pequeño programa hace visible el espacio entre corchetes e imprime su valor numérico:

public class CharExample {
  public static void main(String[] args) {
    char space = ' ';
    System.out.println("[" + space + "]");
    System.out.println((int) space);
  }
}
[ ]
32

Los corchetes permiten distinguir el espacio del texto que lo rodea, y el entero muestra su valor como carácter. El espacio sigue estando presente en las comparaciones y las operaciones con cadenas, así que úsalo solo cuando el espacio en blanco sea el dato que necesitas.

Usa un String vacío cuando no haya ningún carácter

Cuando los datos representan la ausencia de texto, usa String value = "";. Un String vacío tiene longitud cero y resulta adecuado para campos de texto, concatenaciones y API que esperan una cadena. No es un char, por lo que Java no permite asignar "" a una variable primitiva char. También es posible crear un char[] vacío, pero representa una secuencia sin elementos, no un único carácter ausente.

Usa \0 o \u0000 para el carácter nulo

En Java, U+0000 se escribe como \0 o \u0000; ambas formas representan el mismo valor char. A veces se llama carácter nulo a U+0000, pero no es un carácter vacío y, por lo general, no termina un String de Java. Al imprimirlo puede parecer que no hay nada, así que comprueba su valor numérico si necesitas saber qué contiene. Sigue ocupando una unidad de código y cuenta para la longitud length() de una cadena Java.

public class NullCharacterExample {
  public static void main(String[] args) {
    char shortEscape = '\0';
    char unicodeEscape = '\u0000';
    String value = "A" + shortEscape + "B";

    System.out.println(shortEscape == unicodeEscape);
    System.out.println((int) shortEscape);
    System.out.println(value.length());
  }
}
true
0
3

El código compara las dos formas de escribirlo, convierte U+0000 a un entero y mide la cadena resultante. Así se puede comprobar el valor sin depender de cómo lo muestre el terminal. La cadena tiene longitud tres porque contiene A, U+0000 y B.

Usa Character.MIN_VALUE o null con Character

Este ejemplo ejecutable envuelve una letra e imprime su valor y una comprobación de presencia:

public class CharacterExample {
  public static void main(String[] args) {
    Character value = Character.valueOf('J');
    System.out.println(value);
    System.out.println(value == null);
  }
}
J
false

Character.MIN_VALUE es una forma con nombre de obtener U+0000; no es un valor vacío distinto. Úsalo cuando tu formato de datos requiera ese carácter concreto. En cambio, un objeto Character puede contener null para representar un valor ausente. Eso es una referencia inexistente, no un char, y el código debe comprobarla antes de desempaquetarla o llamar a sus métodos.

Java inicializa a U+0000 los campos de instancia de tipo char. Las variables locales char no tienen un valor predeterminado automático y deben asignarse antes de leerse. Elige String si no hay texto, Character con null si el carácter es opcional y \0 solo cuando U+0000 tenga significado por sí mismo.