1. Motivi per la fuga dei caratteri

C'era una volta, hai imparato che per scrivere una stringa di caratteri nel codice, devi racchiuderli tra virgolette doppie. Il risultato è una stringa letterale .

Ma cosa facciamo se abbiamo bisogno di virgolette all'interno di una stringa letterale? Una stringa contenente virgolette: cosa potrebbe essere più semplice?

Diciamo che vogliamo visualizzare il testo "Friends" was nominated for an "Oscar". Come si fa a farlo?

Codice Appunti
String s = ""Friends" was nominated for an "Oscar"";
Questa opzione non funzionerà!

Il problema è che il compilatore pensa che tu stia scrivendo un codice completamente inaspettato:

Codice Appunti
String s = ""Friends" was nominated for an "Oscar"";
Questa opzione non funzionerà!

Dopo che il compilatore incontra le virgolette doppie nel codice, tratta ciò che segue come l'inizio di una stringa letterale. Le virgolette doppie successive indicano la fine del valore letterale stringa.

Quindi, come si scrivono le virgolette doppie all'interno di un letterale?


2. Caratteri in fuga

C'è un modo. Si chiama caratteri di escape . Basta scrivere le virgolette all'interno della stringa di testo. E prima delle virgolette, aggiungi il simbolo \( barra rovesciata ).

Ecco come appare la stringa letterale quando scritta correttamente:

Codice Appunti
String s = "\"Friends\" was nominated for an \"Oscar\"";
Questo funzionerà!

Il compilatore interpreterà tutto correttamente e non considererà le virgolette dopo il backslash come normali virgolette.

Inoltre, se visualizzi questa stringa sullo schermo, le virgolette con barre rovesciate verranno elaborate correttamente e il testo verrà visualizzato senza barre rovesciate:"Friends" was nominated for an "Oscar"

Un altro punto importante. Una virgoletta preceduta da una barra rovesciata rappresenta un singolo carattere: stiamo semplicemente usando una notazione semplice che non interferisce con la capacità del compilatore di riconoscere i valori letterali stringa nel nostro codice. Puoi assegnare virgolette a una charvariabile:

Codice Appunti
char c = '\"';
\"è un carattere, non due
char c = '"';
Anche questo è possibile: virgolette doppie all'interno di virgolette singole

3. Situazioni comuni che si verificano durante l'escape dei caratteri

Situazioni comuni che coinvolgono personaggi in fuga

Oltre alle virgolette, ci sono molti altri caratteri che il compilatore gestisce in modo speciale. Ad esempio, un'interruzione di riga.

Come si aggiunge un'interruzione di riga a un letterale? C'è anche una combinazione speciale per questo:

\n
Carattere di interruzione di riga

Se devi aggiungere un'interruzione di riga a una stringa letterale, devi solo aggiungere un paio di caratteri: \n.

Esempio:

Codice Uscita console
System.out.println("Best regards, \n Anonymous");
Best regards,
Anonymous

Ci sono un totale di 8 combinazioni speciali come questa, chiamate anche sequenze di escape . Eccoli:

Codice Descrizione
\t Inserisci un carattere di tabulazione
\b Inserisci un carattere backspace
\n Inserisci un carattere di nuova riga
\r Inserisci un carattere di ritorno a capo
\f Inserisci un carattere di feed di pagina
\' Inserisci una singola virgoletta
\" Inserisci una doppia virgoletta
\\ Inserisci una barra rovesciata

Ne conosci due, ma cosa significano gli altri 6?

\tè un carattere di tabulazione

Quando questo testo appare nel testo, equivale a premere il Tabtasto durante la digitazione. Sposta il testo che lo segue e rende possibile l'allineamento del testo.

Esempio:

Codice Uscita console
System.out.println("0\t1\t2\t3");
System.out.println("0\t10\t20\t30");
System.out.println("0\t100\t200\t300");
0       1        2        3
0       10       20       30
0       100      200      300

\bsignifica 'tornare indietro di un carattere'

Questa sequenza in una stringa equivale a premere il Backspacetasto sulla tastiera. Rimuove il carattere che lo precede:

Codice Uscita console
System.out.println("Hello\b\b World");
Hell World!

\rè il carattere di ritorno a capo

Questo carattere sposta il cursore all'inizio della riga corrente senza modificare il testo. Qualunque cosa venga visualizzata successivamente sovrascriverà la stringa esistente.

Esempio:

Codice Uscita console
System.out.println("Greetings\r World!");
World!

\fè un carattere di feed di pagina

Questo simbolo ci arriva dai tempi delle prime stampanti a matrice di punti. L'output di questa sequenza su una stampante farebbe sì che la stampante scarichi semplicemente il foglio corrente, senza stampare alcun testo, fino all'inizio di una nuova pagina.

Ora lo chiameremmo interruzione di pagina o nuova pagina .

\\è una barra rovesciata

Tutto è semplice qui. Se usiamo una barra rovesciata per sfuggire ai caratteri nel nostro testo, allora come scriviamo un carattere barra rovesciata nella stringa?

È semplice: aggiungi una barra rovesciata al testo: devi scriverne due di seguito.

Esempio:

Codice Uscita console
System.out.println("c:\projects\my\first");
Il compilatore ti urlerà per i caratteri sfuggiti sconosciuti.
System.out.println("c:\\projects\\my\\first");
Ecco come è fatto bene!


4. Codifica Unicode

Come già saprai, ogni carattere visualizzato sullo schermo corrisponde a uno specifico codice numerico. Un insieme standardizzato di questi codici è chiamato codifica .

Una volta, quando i computer furono appena inventati, bastavano sette bit (meno di un byte) per codificare ogni carattere. La prima codifica conteneva solo 128 caratteri. Questa codifica è stata chiamata ASCII .

ASCII è l'acronimo di American Standard Code for Information Interchange, una tabella di codici americani standard per i caratteri stampabili e alcuni codici speciali.

Consiste di 33 caratteri di controllo non stampabili (che influenzano il modo in cui il testo e gli spazi vengono elaborati) e 95 caratteri stampabili, inclusi numeri, lettere latine maiuscole e minuscole e diversi segni di punteggiatura.

Codifica Unicode

Man mano che i computer crescevano in popolarità, ogni paese ha iniziato a rilasciare la propria codifica. Di solito, prendevano l'ASCII come punto di partenza e sostituivano i caratteri ASCII usati raramente con i simboli dei rispettivi alfabeti.

Nel tempo è emersa un'idea: creare un'unica codifica che contenga tutti i caratteri di ogni codifica del mondo.

Codifica Unicode 1

Così, nel 1993, è stata creata la codifica Unicode e il linguaggio Java è diventato il primo linguaggio di programmazione che ha utilizzato questa codifica come standard per la memorizzazione del testo. Ora Unicode è lo standard per l'intero settore IT.

Sebbene Unicode stesso sia lo standard, ha diverse rappresentazioni o formati di trasformazione Unicode (UTF): UTF-8, UTF-16 e UTF-32, ecc.

Java utilizza una versione avanzata della codifica Unicode — UTF-16: ogni carattere è codificato in 16 bit (2 byte). Può contenere fino a 65.536 caratteri!

Puoi trovare quasi tutti i caratteri di ogni alfabeto del mondo in questa codifica. Naturalmente, nessuno ha memorizzato tutto. Non puoi sapere tutto, ma puoi cercare tutto su Google.

Per scrivere un carattere Unicode nel tuo programma usando il suo codice, devi scrivere \u+ il codice in esadecimale . Per esempio,\u00A9

Codice Uscita console
System.out.println("\u00A9 CodeGym");
© CodeGym


5. Unicode: punto di codice

"640 kilobyte dovrebbero bastare per tutti! Oppure no". (Citazione attribuita a Bill Gates)

La vita è dura e, nel tempo, la codifica UTF-16 ha iniziato a essere inadeguata. Si scopre che ci sono molte lingue asiatiche e hanno molti glifi. E tutti questi glifi semplicemente non possono essere stipati in 2 byte.

Cosa si può fare? Usa più byte !

Ma il tipo char è di soli 2 byte e cambiarlo in 4 non è così facile: miliardi di righe di codice Java sono state scritte in tutto il mondo, che si interromperebbero se il tipo char diventasse improvvisamente 4 byte una macchina Java. Quindi non possiamo cambiare il tipo di carattere!

C'è un altro approccio. Ricorda come sfuggiamo ai personaggi mettendo una barra rovesciata davanti a loro. Fondamentalmente, abbiamo codificato un singolo carattere utilizzando più caratteri.

I creatori di Java hanno deciso di utilizzare lo stesso approccio.

Alcuni caratteri che appaiono visivamente come un singolo carattere sono codificati come due chars in una stringa:

Codice Uscita console
System.out.println("\uD83D\uDD0A");
🔊

Ora il tuo programma Java può persino inviare emoji alla console 😎