I caratteri e il tipo char

Molti linguaggi di programmazione forniscono un tipo di dato i cui valori rappresentano caratteri, cioè lettere dell'alfabeto (sia maiuscole che minuscole), cifre decimali (0, 1, ..., 9), segni di interpunzione, parentesi, ...

Di norma i caratteri vengono rappresentati come numeri interi utilizzando un'opportuna codifica. Ad esempio, in C  e C++, il tipo di dati char usa 8 bit, e usa il codice ASCII (American Standard Code for Information Interchange) per la codifica dei caratteri.

Il codice ASCII in realtà fissa il codice di soli 128 caratteri. I rimanenti 128 valori rappresentabili con 8 bit sono usati per codificare altri caratteri (ad esempio, le lettere accentate), ma con codifiche diverse in sistemi/linguaggi diversi!! 

In Java, il tipo di dati char usa 16 bit per ogni carattere, e usa il codice UNICODE, che permette di rappresentare 216 = 65535 caratteri: questo permette di fissare in modo univoco la codifica di tutte le lettere usate negli alfabeti occidentali, nonchè di ideogrammi e segni usati in altre lingue.

Per leggere valori di tipo char si può usare il metodo Input.readChar().




Costanti di tipo char

Le costanti di tipo carattere si scrivono tra singoli apici. Una costante di questo tipo può essere un carattere semplice o una sequenza di escape.

char ch = 'a'; Assegno alla variabile ch il carattere a minuscola
char ch2 = '\n'; Assegno alla variabile ch2 il carattere di ritorno a capo
char ch3 = '\"'; Assegno alla variabile ch3 il carattere di doppio apice



Manipolazione di char come numeri

Il tipo di dati char è a tutti gli effetti un tipo numerico:

  • si possono applicare ai char tutti gli operatori aritmetici;

  • si possono convertire char in int e viceversa, eventualmente usando l'operatore di cast.

 
char ch1 = 'a';
char ch2 = 'c';
char ch3 = (char) ((ch1 + ch2)/2); System.out.println(ch3);
 

Cosa stampa?
Il cast è necessario?
 
char ch = 'A';
int code = (int) ch;
System.out.println(code);

System.out.println((int) 'A');
 
Due modi equivalenti di stampare il codice UNICODE di 'A', 65.
I cast sono necessari?
 
char lower = 'k';
char upper = (char) (lower - 'a' + 'A');
System.out.println(upper);
 
Cosa stampa?
Tecnica elegante per converire maiuscole in minuscole e viceversa.