Caratteri Java (char)
Rappresenta singoli caratteri in Java con il primitivo char e usa la classe wrapper Character per i metodi di utilità.
char è uno degli otto tipi di dati primitivi di Java. Contiene un singolo valore unsigned a 16 bit — un'unità di codice UTF-16. Per la maggior parte degli script latini, cirillici, greci, arabi, CJK e molti altri, questo corrisponde all'intero carattere. Per emoji e alcuni script meno comuni, un carattere percepito dall'utente richiede due char (una coppia surrogata).
Questa pagina tratta come scrivere i letterali char, il fatto che un char è in realtà un piccolo intero, la classe wrapper Character per la classificazione Unicode-aware, il problema delle coppie surrogate e gli array char[]. Una volta che ti senti a tuo agio con i singoli caratteri, la classe String si costruisce sopra di essi.
Letterali char
Un letterale di carattere è un singolo carattere racchiuso tra virgolette singole:
char a = 'A';
char z = 'z';
char digit = '7';
char punct = '!';Puoi anche usare sequenze di escape e escape Unicode:
char newline = '\n';
char tab = '\t';
char quote = '\'';
char back = '\\';
char copy = '©'; // ©
char pi = 'π'; // πchar è un intero a 16 bit
Un valore char è, internamente, un intero unsigned a 16 bit. Puoi eseguire aritmetica su di esso e convertire da/verso int:
char c = 'A';
int code = c; // 65 — implicit widening to int
char next = (char) (c + 1); // 'B'
char digit5 = (char) ('0' + 5); // '5'Il trucco classico per testare gli intervalli di caratteri:
boolean isUpper = c >= 'A' && c <= 'Z';
boolean isDigit = c >= '0' && c <= '9';Poiché un char si allarga a int, 'A' + 'B' è l'intero 131, non la stringa "AB". All'interno di un System.out.println("x" + c) la String a sinistra forza la concatenazione, ma c1 + c2 da solo è aritmetica. Converti nuovamente con (char) quando vuoi un risultato di carattere.
Il wrapper Character
Character è la classe wrapper. Dispone di decine di metodi statici di utilità per classificare e convertire i caratteri — più affidabili dello stile c >= '0' sopra riportato perché sono Unicode-aware:
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"Preferisci i metodi Character ai controlli manuali sugli intervalli quando potresti incontrare testo non ASCII.
Un char è un'unità di codice UTF-16, non sempre un carattere utente
Questa è la parte sottile. Le stringhe Java sono UTF-16. Per i caratteri con code point fino a U+FFFF (il Basic Multilingual Plane — la maggior parte delle lingue, la maggior parte della punteggiatura), un code point rientra in un char. Per i caratteri oltre U+FFFF — la maggior parte delle emoji, script antichi e alcuni simboli musicali — sono necessari due char (una coppia surrogata).
String emoji = "🎉";
System.out.println(emoji.length()); // 2 — surrogate pair
System.out.println(emoji.codePointCount(0, 2)); // 1 — one user characterSe il tuo codice elabora testo fornito dall'utente e potrebbe incontrare emoji o script rari, preferisci i metodi consapevoli dei code point (String.codePoints(), Character.toString(int), Character.isLetter(int)) rispetto a quelli basati su char.
char[] — array di caratteri
Un char[] viene talvolta utilizzato per l'elaborazione di testo ad alte prestazioni o per le password (puoi azzerare l'array dopo l'uso, mentre non puoi azzerare una String immutabile):
char[] greeting = {'H', 'e', 'l', 'l', 'o'};
String s = new String(greeting); // "Hello"
char[] back = s.toCharArray();Una dimostrazione
Cosa c'è dopo
Classe Math in Java — la libreria di metodi statici per l'aritmetica che va oltre +, -, *, /.