HOWTO · Java

Wie man in Java int in char konvertiert

Dieses Tutorial zeigt, wie man in Java int in char konvertiert: durch einen Cast zu char, mit Character.forDigit() oder indem man das erste Zeichen von Integer.toString() nimmt.

Auf dieser Seite

Wählen Sie in Java die passende Operation danach aus, was der int bedeutet: Verwenden Sie (char), wenn er ein UTF-16-Codeunit darstellt, Character.forDigit() für eine einzelne Ziffer in einer Zahlenbasis oder Integer.toString(), wenn Sie gezielt das erste Zeichen einer Dezimaldarstellung benötigen. Diese Operationen liefern unterschiedliche Ergebnisse und sind nicht austauschbar.

Einen int in einen char umwandeln

Ein Cast interpretiert den Integerwert als UTF-16-Codeunit; er formatiert die Zahl nicht als Dezimaltext. Beispielsweise entspricht das Codeunit 65 dem Zeichen A. Für das Zeichen 1 muss der Integer dieses Zeichen repräsentieren, etwa durch das Literal '1', oder eine Ziffer von 0 bis 9 sein, zu der '0' addiert wird.

Java speichert in char ein 16-Bit-UTF-16-Codeunit. Beim Cast von int zu char wird der Wert auf diese Größe gekürzt. Das ist sinnvoll, wenn die Eingabe bereits ein Codeunit darstellt. Der Cast prüft den Wertebereich nicht: Werte außerhalb des char-Bereichs lösen keinen Fehler aus, und das resultierende Codeunit entspricht möglicherweise nicht dem gewünschten Zeichen. Stammt der Wert aus einer Benutzereingabe oder einer Datei, sollten Sie ihn vor dem Cast prüfen, wenn sein ursprünglicher Zahlenwert erhalten bleiben muss.

Das ist auch bei Unicode wichtig. Viele gebräuchliche Symbole passen in ein einzelnes char, ein ergänzender Unicode-Codepunkt wird jedoch durch zwei UTF-16-Codeunits, ein sogenanntes Surrogatpaar, dargestellt. Ein einzelnes char kann diesen Codepunkt nicht vollständig aufnehmen. Verwenden Sie einen String oder eine codepunktbewusste Operation, wenn Ihre Daten solche Zeichen enthalten können. Bei einer ASCII-Dezimalziffer funktioniert das Addieren von '0' nur für Werte von 0 bis 9, da die Codeunit-Werte dieser zehn Ziffern aufeinanderfolgen. Es ist keine allgemeine Umwandlung einer Zahl in Text.

Eine Ziffer mit Character.forDigit() umwandeln

Character.forDigit() ordnet einem gültigen Ziffernwert das Zeichen für die angegebene Zahlenbasis zu. In Basis 10 steht der Wert 6 für '6'; in Basis 16 steht der Wert 12 für 'c'. Die Ziffer muss mindestens 0 und kleiner als die Zahlenbasis sein, und die Zahlenbasis muss zwischen 2 und 36 liegen. Liegt eines der Argumente außerhalb seines gültigen Bereichs, gibt die Methode das NUL-Zeichen (\u0000) zurück, nicht null.

Verwenden Sie diese Methode, wenn der Integer eine einzelne Ziffer und keine vollständige Zahl darstellt, die ausgegeben werden soll. Der Hexadezimalbereich hat beispielsweise die Basis 16 und verwendet die Werte 0 bis 15; die Werte 10 bis 15 werden den Buchstaben a bis f zugeordnet. Der zurückgegebene Buchstabe ist kleingeschrieben. Soll die Ausgabe großgeschriebene Hexadezimalziffern enthalten, wandeln Sie das Zeichen nach der Auswahl einer gültigen Ziffer mit Character.toUpperCase() um. Mit der dazugehörigen Hilfsmethode Character.digit(character, radix) lässt sich eine Ziffer in einer Zahlenbasis wieder in ihren Zahlenwert umwandeln.

Das NUL-Ergebnis ist ein char mit dem Wert \u0000; es ist nicht die Java-Referenz null und wird von vielen Terminals gar nicht sichtbar dargestellt. Wenn Eingaben von außerhalb Ihres Programms stammen können, prüfen Sie die Bereiche für Zahlenbasis und Ziffer selbst, damit Sie dieses Ergebnis nicht für eine erfolgreiche Umwandlung halten. Wandeln Sie eine vollständige Zahl wie 42 mit einer Formatierungs- oder Stringoperation um, statt Character.forDigit() nur einmal aufzurufen.

Das erste Zeichen von Integer.toString() abrufen

Integer.toString(value).charAt(0) wandelt den Integer in einen Dezimalstring um und wählt daraus nur das erste Zeichen aus. Beim Wert 1 ist dieses Zeichen '1'. Bei einem mehrstelligen Wert erhalten Sie dessen erstes Zeichen, keinen char, der die ganze Zahl repräsentiert.

Der Wert 42 ergibt beispielsweise den String "42"; charAt(0) gibt daher '4' zurück. Ein negativer Wert beginnt mit einem Minuszeichen. Bei einem Wert wie -42 liefert dieser Ausdruck also '-'. Dieser Ansatz eignet sich, wenn Sie tatsächlich das erste Zeichen der Dezimaldarstellung untersuchen oder anzeigen möchten. Benötigen Sie alle Ziffern, behalten Sie das Ergebnis als String: Eine einzelne char-Variable kann eine mehrstellige Zahl nicht darstellen.

Wählen Sie die Methode nach der Bedeutung der Eingabe: Verwenden Sie einen Cast für ein UTF-16-Codeunit, Character.forDigit() für eine einzelne Ziffer in einer gewählten Zahlenbasis und Integer.toString() mit charAt(0) für das erste Zeichen eines Dezimaltexts. So verwechseln Sie einen Zahlenwert wie 65 nicht mit den beiden ausgegebenen Zeichen in "65".

Das folgende Programm zeigt die drei beschriebenen Operationen mit den genannten Werten. Es gibt die resultierenden Zeichen in derselben Reihenfolge aus, in der die Operationen vorgestellt werden.

public class IntToCharExample {
    public static void main(String[] args) {
        int codeUnit = 65;
        char letter = (char) codeUnit;

        int literalDigitValue = '1';
        char literalDigit = (char) literalDigitValue;
        int digit = 1;
        char addedZeroDigit = (char) (digit + '0');

        char decimalDigit = Character.forDigit(6, 10);
        char hexadecimalDigit = Character.forDigit(12, 16);

        int value = 1;
        char firstCharacter = Integer.toString(value).charAt(0);

        System.out.println(letter);
        System.out.println(literalDigit);
        System.out.println(addedZeroDigit);
        System.out.println(decimalDigit);
        System.out.println(hexadecimalDigit);
        System.out.println(firstCharacter);
    }
}
A
1
1
6
c
1