Java-Zeichen (char)
Einzelne Zeichen in Java mit dem char-Primitiv darstellen und die Character-Wrapper-Klasse für Hilfsmethoden verwenden.
char ist einer von Javas acht primitiven Datentypen. Er speichert einen einzelnen vorzeichenlosen 16-Bit-Wert — eine UTF-16-Codeeinheit. Für die meisten lateinischen, kyrillischen, griechischen, arabischen, CJK- und viele andere Schriften passt das gesamte Zeichen hinein. Bei Emoji und einigen selteneren Schriften benötigt ein vom Benutzer wahrgenommenes Zeichen zwei char-Werte (ein Ersatzzeichenpaar).
Diese Seite behandelt das Schreiben von char-Literalen, die Tatsache, dass ein char intern eine kleine ganze Zahl ist, die Character-Wrapper-Klasse für Unicode-bewusste Klassifizierung, die Besonderheit mit Ersatzzeichenpaaren und char[]-Arrays. Wenn Sie mit einzelnen Zeichen vertraut sind, baut die String-Klasse darauf auf.
char-Literale
Ein Zeichenliteral ist ein Zeichen, das in einfache Anführungszeichen eingeschlossen ist:
char a = 'A';
char z = 'z';
char digit = '7';
char punct = '!';Sie können auch Escape-Sequenzen und Unicode-Escapes verwenden:
char newline = '\n';
char tab = '\t';
char quote = '\'';
char back = '\\';
char copy = '©'; // ©
char pi = 'π'; // πchar ist eine 16-Bit-Ganzzahl
Ein char-Wert ist intern eine vorzeichenlose 16-Bit-Ganzzahl. Sie können arithmetische Operationen darauf ausführen und ihn in int umwandeln und zurück:
char c = 'A';
int code = c; // 65 — implicit widening to int
char next = (char) (c + 1); // 'B'
char digit5 = (char) ('0' + 5); // '5'Der klassische Trick zum Testen von Zeichenbereichen:
boolean isUpper = c >= 'A' && c <= 'Z';
boolean isDigit = c >= '0' && c <= '9';Da ein char zu int erweitert wird, ist 'A' + 'B' die Ganzzahl 131, nicht der string "AB". Innerhalb eines System.out.println("x" + c) erzwingt der String auf der linken Seite die Verkettung, aber c1 + c2 allein ist Arithmetik. Konvertieren Sie mit (char) zurück, wenn Sie ein Zeichenergebnis möchten.
Der Character-Wrapper
Character ist die Wrapper-Klasse. Sie verfügt über Dutzende statischer Hilfsmethoden zum Klassifizieren und Konvertieren von Zeichen — zuverlässiger als der obige c >= '0'-Stil, weil sie Unicode-bewusst sind:
Character.isLetter('A'); // true
Character.isDigit('7'); // true
Character.isLetterOrDigit('é'); // true
Character.isWhitespace(' '); // true
Character.isUpperCase('A'); // true
Character.isLowerCase('a'); // true
Character.toUpperCase('a'); // 'A'
Character.toLowerCase('A'); // 'a'
Character.getNumericValue('7'); // 7
Character.toString('A'); // "A"Bevorzugen Sie die Character-Methoden gegenüber manuellen Bereichsprüfungen, wenn Sie möglicherweise Nicht-ASCII-Text begegnen.
Ein char ist eine UTF-16-Codeeinheit, nicht immer ein Benutzerzeichen
Dies ist der subtile Teil. Java-Strings sind UTF-16. Für Zeichen mit Codepunkten bis U+FFFF (die Basic Multilingual Plane — die meisten Sprachen, die meisten Satzzeichen) passt ein Codepunkt in einen char. Für Zeichen über U+FFFF — die meisten Emoji, alte Schriften und einige Musiksymbole — werden zwei char-Werte benötigt (ein Ersatzzeichenpaar).
String emoji = "🎉";
System.out.println(emoji.length()); // 2 — surrogate pair
System.out.println(emoji.codePointCount(0, 2)); // 1 — one user characterWenn Ihr Code vom Benutzer bereitgestellten Text verarbeitet und möglicherweise Emoji oder seltene Schriften enthält, bevorzugen Sie codepunktbewusste Methoden (String.codePoints(), Character.toString(int), Character.isLetter(int)) gegenüber den char-basierten.
char[] — Zeichenarrays
Ein char[] wird manchmal für leistungssensible Textverarbeitung oder für Passwörter verwendet (Sie können das Array nach der Verwendung nullsetzen, während Sie einen unveränderlichen String nicht nullsetzen können):
char[] greeting = {'H', 'e', 'l', 'l', 'o'};
String s = new String(greeting); // "Hello"
char[] back = s.toCharArray();Eine Demonstration
Was kommt als Nächstes
Java Math-Klasse — die statische Methodenbibliothek für Arithmetik, die über +, -, *, / hinausgeht.