HOWTO · Java

Converti Int in Char in Java

Questo tutorial mostra come convertire int in char in Java con un cast a char, usando Character.forDigit() oppure prendendo il primo carattere di Integer.toString().

In questa pagina

In Java, scegli l’operazione in base al significato dell’int: usa il cast (char) quando rappresenta un’unità di codice UTF-16, Character.forDigit() per una singola cifra in una base oppure Integer.toString() se ti serve proprio il primo carattere della rappresentazione decimale. Queste operazioni producono risultati diversi e non sono intercambiabili.

Convertire un int in char con un cast

Un cast interpreta il valore intero come un’unità di codice UTF-16; non formatta il numero come testo decimale. Per esempio, l’unità di codice 65 corrisponde a A. Per ottenere il carattere 1, l’intero deve rappresentare quel carattere, come nel letterale '1', oppure essere una cifra da 0 a 9 a cui si aggiunge '0'.

In Java, char memorizza una singola unità di codice UTF-16 a 16 bit. Il cast da int a char riduce il valore a quella dimensione, quindi è utile quando l’input rappresenta già un’unità di codice. Non esegue un controllo dell’intervallo: i valori fuori dall’intervallo di char non generano un errore e l’unità di codice risultante potrebbe non essere il carattere desiderato. Se il valore proviene dall’input dell’utente o da un file, convalidalo prima del cast quando è importante conservarne il valore numerico originale.

Questa distinzione è importante anche per Unicode. Molti simboli comuni rientrano in un solo char, ma un punto di codice Unicode supplementare è rappresentato da due unità di codice UTF-16, dette coppia di surrogati. Un singolo char non può contenere l’intero punto di codice. Se i dati possono includere caratteri di questo tipo, usa una stringa o un’operazione che gestisca i punti di codice. Per una cifra decimale ASCII, aggiungere '0' funziona solo per i valori da 0 a 9, perché i valori delle unità di codice di queste dieci cifre sono consecutivi; non è una conversione generica da numero a testo.

Convertire una cifra con Character.forDigit()

Character.forDigit() associa una cifra valida al carattere corrispondente nella base specificata. In base 10, il valore 6 rappresenta '6'; in base 16, il valore 12 rappresenta 'c'. La cifra deve essere compresa tra 0 incluso e la base esclusa, e la base deve essere compresa tra 2 e 36. Se uno dei due argomenti non rientra nell’intervallo valido, il metodo restituisce il carattere NUL (\u0000), non null.

Usa questo metodo quando l’intero rappresenta una sola cifra, non un numero completo da stampare. Per esempio, la base esadecimale è 16 e usa i valori da 0 a 15; i valori da 10 a 15 corrispondono alle lettere da a a f. La lettera restituita è minuscola. Se il formato di output richiede cifre esadecimali maiuscole, dopo aver scelto una cifra valida converti il carattere restituito con Character.toUpperCase(). Il metodo inverso, Character.digit(character, radix), può riconvertire una cifra in una base nel suo valore numerico.

Il risultato NUL è un char il cui valore è \u0000; non è il riferimento Java null e molti terminali non mostrano nulla al suo posto. Se l’input può provenire dall’esterno del programma, controlla personalmente gli intervalli della base e della cifra, così da non scambiare questo risultato per una conversione riuscita. Per un numero intero come 42, converti l’intero valore con un’operazione di formattazione o una stringa invece di chiamare Character.forDigit() una sola volta.

Ottenere il primo carattere di Integer.toString()

Integer.toString(value).charAt(0) converte l’intero nella sua stringa decimale e seleziona soltanto il primo carattere. Con il valore 1, quel carattere è '1'. Per un valore con più cifre, restituisce il carattere iniziale, non un char che rappresenta l’intero numero.

Per esempio, il valore 42 produce la stringa "42", quindi charAt(0) restituisce '4'. Un valore negativo inizia con il segno meno, perciò questa espressione restituisce '-' per un valore come -42. Questo approccio è adatto quando l’obiettivo è davvero esaminare o visualizzare il primo carattere della rappresentazione decimale. Se ti servono tutte le cifre, conserva il risultato come String: un singolo char non può rappresentare un numero composto da più caratteri.

Scegli in base al significato dell’input: usa un cast per un’unità di codice UTF-16, Character.forDigit() per una cifra in una base scelta e Integer.toString() seguito da charAt(0) per il carattere iniziale del testo decimale. Esplicitare questa distinzione evita di confondere un valore numerico come 65 con i due caratteri stampati in "65".

Il programma seguente mostra tutte e tre le operazioni con i valori descritti sopra. Stampa i caratteri risultanti nello stesso ordine in cui vengono presentate le operazioni.

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