HOWTO · Java

Representar Caráter Vazio em Java

Este artigo apresenta como lidar com caracteres vazios em Java.

Nesta página

Java não tem um char primitivo vazio: um char armazena uma unidade de código UTF-16. O literal '' é inválido porque não contém nenhum caractere. É possível ter um char[] vazio, mas ele é um array com zero elementos, não um valor char. Para representar ausência de texto, use uma String vazia; para um valor de caractere, escolha um caractere real, como um espaço ou U+0000.

Por que '' é inválido e um espaço é diferente

Um literal char usa aspas simples e contém um caractere. A expressão char ch = ''; não compila. Em contrapartida, ' ' é um char válido que contém um espaço. Este pequeno programa deixa o espaço visível entre colchetes e imprime seu valor numérico:

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

Os colchetes distinguem o espaço do texto ao redor, e o número inteiro mostra o valor do caractere. Um espaço continua presente em comparações e operações com strings; portanto, use-o somente quando o espaço em branco for o dado pretendido.

Use uma String vazia quando não houver caractere

Quando os dados representam ausência de texto, use String value = "";. Uma String vazia tem comprimento zero e é adequada para campos de texto, concatenação e APIs que esperam uma string. Ela não é um char, então Java não permite atribuir "" a uma variável primitiva char. Também é possível ter um char[] vazio, mas ele representa uma sequência sem elementos, e não um único caractere ausente.

Use \0 ou \u0000 para o caractere nulo

Em Java, U+0000 é representado por \0 ou \u0000; ambas as formas correspondem ao mesmo valor char. U+0000 às vezes é chamado de caractere nulo, mas não é um caractere vazio e, em geral, não termina uma String em Java. Ao imprimi-lo, ele pode parecer um espaço em branco; por isso, consulte seu valor numérico para verificar o que contém. Ele ainda ocupa uma unidade de código e contribui para o length() de uma string 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

O código compara as duas formas, converte U+0000 em um número inteiro e mede a string resultante. Assim, é possível verificar o valor sem depender de como o terminal o exibe. O comprimento da string é três porque ela contém A, U+0000 e B.

Use Character.MIN_VALUE ou null com Character

Este exemplo executável envolve uma letra e imprime seu valor e uma verificação de presença:

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 é uma forma nomeada de obter U+0000; não é um valor vazio distinto. Use-o quando esse caractere específico for exigido pelo formato dos seus dados. Uma variável wrapper Character pode, em vez disso, conter null para representar um valor ausente. Isso é uma referência ausente, não um char, e o código deve verificá-la antes de fazer unboxing ou chamar métodos nela.

Java inicializa um campo de instância do tipo char com U+0000. Uma variável local char não recebe um valor padrão automaticamente e precisa ser atribuída antes de ser lida. Escolha String quando não houver texto, Character com null para um caractere opcional e \0 somente quando o próprio U+0000 tiver significado.