HOWTO · Java

Représenter un caractère vide en Java

Cet article explique comment gérer les caractères vides en Java.

Sur cette page

Java ne possède pas de char primitif vide : un char contient une unité de code UTF-16. Le littéral '' est invalide, car il ne contient aucun caractère. Un tableau char[] vide est possible, mais c’est un tableau de zéro élément, pas une valeur char. Pour représenter l’absence de texte, utilisez une String vide ; pour une valeur de type caractère, choisissez un caractère réel, comme une espace ou U+0000.

Pourquoi '' est invalide et une espace est différente

Un littéral char s’écrit entre apostrophes et contient un caractère. L’expression char ch = ''; ne compile pas. En revanche, ' ' est un char valide qui contient une espace. Ce petit programme rend l’espace visible entre des crochets et affiche sa valeur numérique :

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

Les crochets permettent de distinguer l’espace du texte qui l’entoure, et l’entier indique sa valeur de caractère. Une espace reste présente dans les comparaisons et les opérations sur les chaînes ; utilisez-la donc uniquement lorsque l’espace blanc constitue bien la donnée voulue.

Utilisez une String vide en l’absence de caractère

Lorsque les données ne représentent aucun texte, utilisez String value = "";. Une String vide a une longueur nulle et convient aux champs textuels, à la concaténation et aux API qui attendent une chaîne. Ce n’est pas un char : Java ne permet donc pas d’affecter "" à une variable primitive char. Un tableau char[] vide est également possible, mais il représente une séquence sans élément, et non un caractère absent.

Utilisez \0 ou \u0000 pour le caractère nul

En Java, U+0000 s’écrit \0 ou \u0000 ; ces deux formes représentent la même valeur réelle de type char. U+0000 est parfois appelé caractère nul, mais ce n’est pas un caractère vide et il ne termine généralement pas une String Java. À l’affichage, il peut sembler invisible ; vérifiez donc sa valeur numérique pour savoir ce qu’il contient. Il occupe tout de même une unité de code et compte dans la valeur renvoyée par length() pour une chaîne 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

Le code compare les deux écritures, convertit U+0000 en entier et mesure la chaîne obtenue. Vous pouvez ainsi vérifier la valeur sans dépendre de la façon dont le terminal l’affiche. La chaîne a une longueur de trois, car elle contient A, U+0000 et B.

Utilisez Character.MIN_VALUE ou null avec Character

Cet exemple exécutable encapsule une lettre et affiche sa valeur ainsi qu’un test de présence :

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 est une constante nommée qui permet d’obtenir U+0000 ; ce n’est pas une valeur vide distincte. Utilisez-la lorsque ce caractère précis est requis par votre format de données. Un objet Character peut plutôt contenir null pour représenter une valeur absente. Il s’agit alors d’une référence manquante, pas d’un char ; le code doit la vérifier avant de la convertir en valeur primitive ou d’appeler ses méthodes.

Java initialise à U+0000 un champ d’instance de type char. Une variable locale char n’a pas de valeur par défaut automatique et doit être affectée avant d’être lue. Choisissez String pour représenter l’absence de texte, Character avec null pour un caractère facultatif, et \0 uniquement lorsque U+0000 a lui-même un sens.