Un frammento di lezione con un mentore come parte del corso Codegym University. Iscriviti al corso completo.


"Saluti, Amigo. C'era una volta, hai imparato che per scrivere una stringa di caratteri in codice, devi racchiuderli tra virgolette."

"Sì, e questo ci dà una stringa letterale . Non è passato molto tempo da quando l'ho scoperto."

"Nella nostra professione, è stato tanto tempo fa. Ma non è questo il punto in questo momento. Invece, per favore dimmi cosa fare se abbiamo bisogno di virgolette all'interno di una stringa letterale?"

"Hmm... Una stringa contenente virgolette — cosa potrebbe essere più semplice. Sono sicuro che ci sia un modo..."

"Sì. Diciamo che vogliamo visualizzare il testo "Friends" was nominated for an "Oscar". Come lo faremmo?"

"Ad essere onesto, non ne ho idea. Non riesco a pensare a niente."

"Non sarai in grado di arrivare a una soluzione attraverso la logica. Lascia che ti mostri cosa fare.

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

"Questa opzione non funzionerà, perché il compilatore lo interpreta come codice completamente diverso:

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 della stringa letterale."

"Allora come si scrivono le virgolette doppie all'interno di un letterale?"

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

"Questo è l'aspetto del letterale stringa se scritto correttamente:

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

"Il compilatore interpreterà tutto correttamente e non considererà le virgolette dopo la barra rovesciata 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"

"Beh, non dirò che questo è super conveniente..."

"Ma cosa puoi fare, queste sono le regole. Un altro punto importante. Una virgoletta preceduta da una barra rovesciata rappresenta un singolo carattere: stiamo semplicemente usando una notazione chiara che non interferisce con la capacità del compilatore di riconoscere i valori letterali stringa nel nostro 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

Situazioni comuni che si verificano durante l'escape dei caratteri

"Oltre alle doppie 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, aggiungi solo 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 . Eccole:

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

"Me ne hai già mostrati due. Cosa significano gli altri 6?"

"Ti spiego tutto subito.

\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");
Hel World

\rè il carattere di ritorno a capo

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

Esempio:

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

\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!

"Usare le doppie barre ha senso. Ma non sono riuscito a memorizzare immediatamente tutto il resto. Dovrò fare affidamento sui tuoi suggerimenti."

"A poco a poco ti ricorderai di cosa hai bisogno. Non preoccuparti. E per tutto il resto c'è Google.

Codifica Unicode

"Sai già che ogni carattere visualizzato sullo schermo corrisponde a un codice numerico specifico. Un insieme standardizzato di questi codici è chiamato codifica .

"Una volta, quando i computer sono stati appena inventati, sette bit (meno di un byte) erano sufficienti per codificare ogni carattere. La prima codifica conteneva solo 128 caratteri. Questa codifica era chiamata ASCII . "

"È un nome strano."

"Non c'è niente di strano. È un'abbreviazione. ASCII sta per American Standard Code for Information Interchange, una tabella di codici standard americana 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.

"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

"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 tutti gli alfabeti del mondo in questa codifica. "

"Spero di non aver bisogno di saperlo a memoria?"

"Se vuoi, fallo!"

"Va bene, va bene. Userò questa regola: non puoi sapere tutto, ma puoi cercare tutto su Google."

"Adottare un approccio razionale è tutto. Quindi, per scrivere un carattere Unicode nel tuo programma usando il suo codice, devi scrivere \u+ il codice in esadecimale . Ad esempio,\u00A9

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

Unicode: punto di codice

"640 kilobyte dovrebbero bastare per tutti! Oppure no". Bill Gates una volta lo disse. O no. Almeno questa citazione è attribuita a lui."

"Haha. 640 kilobyte non sono nemmeno sufficienti per caricare il cervello di un robot delle pulizie."

"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 ."

"Quindi cosa facciamo?"

"Usa più byte ! Ma il tipo char è solo di 2 byte e cambiarlo in 4 non è così facile: miliardi di righe di codice Java sono state scritte in tutto il mondo, il che si interromperebbe se il tipo char diventasse improvvisamente 4 byte a Java macchina. Quindi non possiamo cambiare il tipo di carattere!

"C'è un altro approccio. Ricorda come sfuggiamo ai caratteri mettendo una barra rovesciata davanti a loro. Fondamentalmente, abbiamo codificato un singolo carattere usando 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 😎"

"Lo userò sicuramente per divertirmi un po'!"