W3docs

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';
Attenzione

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 character

Se 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

java— editable, runs on the server

Cosa c'è dopo

Classe Math in Java — la libreria di metodi statici per l'aritmetica che va oltre +, -, *, /.

Pratica

Pratica
Quali affermazioni su char in Java sono corrette?
Quali affermazioni su char in Java sono corrette?
Was this page helpful?