HOWTO · Java

Leeres Zeichen in Java darstellen

In diesem Artikel wird erläutert, wie mit leeren Zeichen in Java umgegangen wird.

Auf dieser Seite

In Java gibt es kein leeres primitives char: Ein char enthält eine UTF-16-Codeeinheit. Das Literal '' ist ungültig, weil es kein Zeichen enthält. Ein leeres char[] ist möglich, aber es ist ein Array mit null Elementen und kein char-Wert. Wenn kein Text vorhanden ist, verwenden Sie einen leeren String; wenn Sie einen Zeichenwert benötigen, wählen Sie ein tatsächliches Zeichen wie ein Leerzeichen oder U+0000.

Warum '' ungültig ist und sich von einem Leerzeichen unterscheidet

Ein char-Literal steht in einfachen Anführungszeichen und enthält genau ein Zeichen. Der Ausdruck char ch = ''; lässt sich nicht kompilieren. Dagegen ist ' ' ein gültiger char, der ein Leerzeichen enthält. Dieses kleine Programm macht das Leerzeichen in eckigen Klammern sichtbar und gibt seinen Zahlenwert aus:

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

Die Klammern heben das Leerzeichen vom umgebenden Text ab, und die Ganzzahl zeigt seinen Zeichenwert. Bei Vergleichen und Zeichenkettenoperationen ist ein Leerzeichen weiterhin vorhanden. Verwenden Sie es daher nur, wenn Leerraum tatsächlich zu den Daten gehören soll.

Verwenden Sie einen leeren String, wenn kein Zeichen vorhanden ist

Wenn die Daten keinen Text enthalten, verwenden Sie String value = "";. Ein leerer String hat die Länge null und eignet sich für Textfelder, Verkettungen und APIs, die eine Zeichenkette erwarten. Er ist kein char, daher lässt Java die Zuweisung von "" an eine primitive char-Variable nicht zu. Auch ein leeres char[] ist möglich, aber es stellt eine Folge ohne Elemente dar und nicht ein einzelnes fehlendes Zeichen.

Verwenden Sie \0 oder \u0000 für das Nullzeichen

In Java wird U+0000 als \0 oder \u0000 geschrieben; beide Schreibweisen stehen für denselben tatsächlichen char-Wert. U+0000 wird manchmal Nullzeichen genannt, ist aber kein leeres Zeichen und beendet eine Java-String-Instanz im Allgemeinen nicht. Bei der Ausgabe kann es unsichtbar wirken. Prüfen Sie deshalb seinen Zahlenwert, wenn Sie den enthaltenen Wert erkennen müssen. Es belegt weiterhin eine Codeeinheit und zählt zur length()-Länge eines Java-Strings.

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

Der Quelltext vergleicht die beiden Schreibweisen, wandelt U+0000 in eine Ganzzahl um und misst die resultierende Zeichenkette. So lässt sich der Wert überprüfen, ohne sich darauf zu verlassen, wie ein Terminal ihn darstellt. Die Zeichenkette hat die Länge drei, weil sie A, U+0000 und B enthält.

Verwenden Sie Character.MIN_VALUE oder null mit Character

Dieses ausführbare Beispiel umschließt einen Buchstaben und gibt seinen Wert sowie eine Prüfung auf Vorhandensein aus:

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 ist eine benannte Möglichkeit, U+0000 zu erhalten; es ist kein eigener Wert für „leer“. Verwenden Sie es, wenn Ihr Datenformat genau dieses Zeichen verlangt. Eine Character-Wrapper-Instanz kann stattdessen null enthalten, um einen fehlenden Wert darzustellen. Dabei handelt es sich um eine fehlende Referenz, nicht um einen char. Der Code muss sie daher prüfen, bevor er sie entpackt oder Methoden auf ihr aufruft.

Java initialisiert ein Instanzfeld vom Typ char mit U+0000. Eine lokale char-Variable erhält keinen automatischen Standardwert und muss vor dem Lesen zugewiesen werden. Verwenden Sie String für keinen Text, Character mit null für ein optionales Zeichen und \0 nur dann, wenn U+0000 selbst eine Bedeutung hat.