1. Caratteri speciali di base ed escaping
Nella programmazione le stringhe sono composte non solo da lettere, ma anche da caratteri speciali: virgolette, ritorni a capo, tabulazioni, e talvolta perfino sequenze come \n e \t. Ma se vuoi scrivere nella stringa Ciao, "user"!, il compilatore potrebbe chiedersi: “E le virgolette dentro la stringa — sono un errore?”. Ecco dove serve il meccanismo di escape.
In Java l’escape è un modo per “indicare un trattamento speciale” ad alcuni caratteri all’interno di una stringa. Per farlo si usa la barra rovesciata \ (detta anche “backslash”).
Caratteri speciali classici:
| Sequenza | Descrizione | Dimostrazione |
|---|---|---|
|
A capo | Ha premuto Invio |
|
Tabulazione | Tab |
|
Backslash letterale | |
|
Virgolette dentro una stringa | |
|
Apostrofo (raramente necessario nelle stringhe) | |
|
Carriage return (stile vecchio di a capo, usato raramente) | |
|
Carattere null | (Invisibile) |
|
Backspace (cancella il carattere precedente — in console non sempre funziona) |
Come funziona
Scriviamo un paio di stringhe con caratteri in escape per vederli in azione.
System.out.println("Ciao, \"Utente\"!");
// Output: Ciao, "Utente"!
System.out.println("C:\\Program Files\\MyApp");
// Output: C:\Program Files\MyApp
System.out.println("Riga 1\nRiga 2");
// Output:
// Riga 1
// Riga 2
System.out.println("Io\tamo\tla\ttabulazione!");
// Output:
// Io amo la tabulazione!
Così, con una sola barretta inversa (\), puoi “inserire” nella stringa quasi qualsiasi carattere speciale, senza mandare nel panico il compilatore o un collega del team.
2. Stringhe multilinea e a capo
Spesso bisogna scrivere un messaggio su più righe o dell’ASCII art. Il modo più diretto è usare \n in una stringa normale.
System.out.println("Prima riga\nSeconda riga\nTerza riga");
Tuttavia non è sempre comodo, quindi in Java sono arrivati i blocchi di testo (Text Blocks). Iniziano con le triple virgolette """ e permettono di scrivere testo multilinea senza escape, mantenendo il formato — ideale per JSON, SQL e HTML.
// Letterale multilinea (Text Block)
String json = """
{
"name": "Alice",
"age": 30,
"skills": ["Java", "SQL", "Cloud"]
}
""";
System.out.println(json);
"""
Con i blocchi di testo puoi anche creare facilmente testo su più righe che include virgolette, senza doverle duplicare.
3. Unicode: come Java memorizza qualsiasi carattere del mondo
Nel mondo moderno lavoriamo non solo con l’alfabeto latino, ma anche con il cirillico, ideogrammi, simboli matematici e persino emoji. Tutto questo è possibile grazie al sistema di codifica dei caratteri — Unicode.
Che cos’è Unicode?
Unicode è uno standard internazionale che assegna un numero univoco (code point) a ogni carattere, indipendentemente da lingua e piattaforma. Grazie a ciò puoi usare in Java contemporaneamente testo in italiano/inglese, ideogrammi cinesi e persino simboli speciali rari.
Esempio di stringa in lingue diverse:
System.out.println("Ciao, mondo! 你好! مرحبا!");
Caratteri Unicode nelle stringhe
Puoi scrivere direttamente qualsiasi carattere supportato dalla tua codifica oppure usare sequenze di escape del tipo \uXXXX, dove XXXX è il codice esadecimale a 4 cifre del carattere.
System.out.println("Simbolo: \u263A"); // Stamperà 😊
Per i caratteri con codice maggiore di 65535 (ad esempio molte faccine) si usa una coppia surrogata (UTF-16):
// Carattere 😊 (codice 1F60A) rappresentato da due char
System.out.println("Emoji: \uD83D\uDE0A"); // Stamperà 😊
Che cosa ti offre tutto questo?
- Puoi memorizzare ed elaborare qualsiasi testo.
- Non temere di mescolare lingue e usare caratteri non standard — Java supporta Unicode pronta all’uso.
- È particolarmente importante quando si lavora con utenti internazionali e alfabeti non standard.
4. Emoji e caratteri speciali nelle stringhe
Le stringhe moderne non sono solo lettere, ma anche emoji! Per esempio, vuoi inviare all’utente un messaggio allegro con una “faccina”.
Come aggiungere un’emoji in una stringa?
Inserisci l’emoji direttamente nella stringa:
System.out.println("Ciao! 😊");
Usa i codici Unicode: per la maggior parte delle emoji si possono usare sequenze surrogate.
System.out.println("Ecco un gattino: \uD83D\uDC31"); // 🐱
Le emoji possono occupare due char in una stringa (a causa di UTF-16). Perciò in alcune operazioni (ad esempio, ottenere la lunghezza) possono esserci sorprese:
String s = "😊";
System.out.println(s.length()); // Stamperà 2, non 1!
Questo perché un singolo code point Unicode è codificato da due char in Java. Per lavorare correttamente con i caratteri, usa i code point e i relativi metodi invece del semplice length().
5. Insidie ed errori comuni
Errore n°1: uso scorretto delle virgolette dentro una stringa. Se non esegui l’escape delle virgolette interne, il compilatore “pensa” che la stringa sia finita.
System.out.println("Ha detto: "Ciao!""); // Errore!
Corretto:
System.out.println("Ha detto: \"Ciao!\"");
Errore n°2: singolo backslash in un percorso. In Java \ è usato per le sequenze speciali (\n, \t, \f ecc.). Quindi la stringa "C:\Temp\file.txt" viene interpretata in modo errato.
System.out.println("C:\Temp\file.txt"); // Errore o risultato imprevisto
Corretto:
System.out.println("C:\\Temp\\file.txt"); // Doppi backslash
Errore n°3: ignorare i blocchi di testo. A partire da Java 15 usa i blocchi di testo: semplificano il lavoro con le stringhe multilinea.
String path = """
C:\Temp\file.txt
""";
System.out.println(path);
Regola principale: esegui sempre l’escape dei caratteri speciali e delle virgolette. Ti eviterà bug nascosti e ti farà risparmiare ore di debug.
GO TO FULL VERSION