CodeGym /Java Blog /Random-IT /Caratteri di escape Java
John Squirrels
Livello 41
San Francisco

Caratteri di escape Java

Pubblicato nel gruppo Random-IT
CIAO! Nelle lezioni precedenti abbiamo già familiarizzato con le stringhe di testo, che in Java sono rappresentate dalla classe String . Come probabilmente ricorderai, una stringa è una sequenza di caratteri. Questi caratteri possono essere lettere, numeri, segni di punteggiatura e così via. La cosa principale quando si crea una stringa è che l'intera sequenza deve essere racchiusa tra virgolette:

public class Main {
   public static void main(String[] args) {
       String alex = new String ("My name is Alex. I'm 20!");
   }
}
Ma cosa facciamo se dobbiamo creare una stringa che a sua volta deve contenere virgolette? Ad esempio, supponiamo di voler raccontare al mondo il tuo libro preferito:

public class Main {
   public static void main(String[] args) {
       String myFavoriteBook = new String ("My favorite book is "Twilight" by Stephanie Meyer");
   }
}
Sembra che il compilatore non sia contento di qualcosa! Secondo voi quale potrebbe essere il problema? E cosa c'entra con le virgolette? In effetti, è tutto molto semplice. Il compilatore interpreta le virgolette in un modo molto specifico, cioè si aspetta che le stringhe siano racchiuse in esse. E ogni volta che il compilatore vede ", si aspetta che la virgoletta sia seguita da una seconda virgoletta e che il contenuto tra di esse sia il testo di una stringa che deve essere creata dal compilatore. Nel nostro caso, le virgolette intorno la parola "Twilight" è racchiusa tra virgolette . Quando il compilatore raggiunge questa parte di testo, semplicemente non capisce cosa dovrebbe fare. La virgoletta suggerisce che deve essere creata una stringa. Ma questo è ciò che il compilatore è Giàfacendo! Ecco perché: semplicemente parlando, il compilatore si confonde su ciò che dovrebbe fare. "Un'altra virgoletta? È una specie di errore? Sto già creando una stringa! O dovrei crearne un'altra? Argh!...:/" Dobbiamo far sapere al compilatore quando una virgoletta è un comando ( "crea una stringa!") e quando è semplicemente un carattere ("mostra la parola "Twilight" insieme alle virgolette!"). Per fare ciò, Java utilizza il carattere di escape . Ciò si ottiene utilizzando un simbolo speciale: \ . Questo simbolo è normalmente chiamato "barra rovesciata". In Java, una barra rovesciata combinata con un carattere da "escape" è chiamata sequenza di controllo . Ad esempio, \"è una sequenza di controllo per la visualizzazione delle virgolette sullo schermo. Dopo aver incontrato questo costrutto nel tuo codice, il compilatore capirà che questa è solo una virgoletta che dovrebbe essere visualizzata sullo schermo. Proviamo a cambiare il nostro codice con il libro:

public static void main(String[] args) {
       String myFavoriteBook = new String ("My favorite book is \"Twilight\" by Stephanie Meyer");
       System.out.println(myFavoriteBook);
   }
}
Abbiamo usato \ per evitare le nostre due virgolette "interne". Proviamo a eseguire il metodo main() ... Output della console:
My favorite book is "Twilight" by Stephanie Meyer
Eccellente! Il codice ha funzionato esattamente come volevamo! Le virgolette non sono affatto gli unici caratteri di cui potremmo aver bisogno per sfuggire. Supponiamo di voler raccontare a qualcuno del nostro lavoro:

public class Main {
   public static void main(String[] args) {
       String workFiles= new String ("My work files are in D:\Work Projects\java");
       System.out.println(workFiles);
   }
}
Un altro errore! Riesci a indovinare perché? Ancora una volta, il compilatore non capisce cosa fare. Dopotutto, il compilatore non conosce \ come nient'altro che una sequenza di controllo ! Si aspetta che la barra rovesciata sia seguita da un certo carattere che deve in qualche modo interpretare in modo speciale (come una virgoletta). Ma, in questo caso, \ è seguito da lettere ordinarie. Quindi il compilatore è di nuovo confuso. Cosa dovremmo fare? Esattamente la stessa cosa di prima: aggiungiamo semplicemente un altro \ al nostro \ !

public class Main {

   public static void main(String[] args) {

       String workFiles= new String ("My work files are in D:\\Work Projects\\java");
       System.out.println(workFiles);

   }
}
Vediamo cosa otteniamo: Uscita della console:
My work files are in D:\Work Projects\java
Super! Il compilatore determina immediatamente che \ sono caratteri ordinari che dovrebbero essere visualizzati insieme al resto. Java ha molte sequenze di controllo. Ecco l'elenco completo:
  • \t - scheda.
  • \b - backspace (un passo indietro nel testo o la cancellazione di un singolo carattere).
  • \n - nuova riga.
  • \r - ritorno a capo. ()
  • \f - feed modulo.
  • \' citazione singola.
  • \" doppie virgolette.
  • \\ barra rovesciata.
Pertanto, se il compilatore incontra \n nel testo, comprende che questo non è solo un simbolo e una lettera da visualizzare sulla console, ma piuttosto un comando speciale per "spostarsi in una nuova riga!". Ad esempio, questo può essere utile se vogliamo visualizzare parte di una poesia:

public class Main {
   public static void main(String[] args) {
       String byron = new String ("She walks in beauty, like the night, \nOf cloudless climes and starry skies\nAnd all that's best of dark and bright\nMeet in her aspect and her eyes...");
       System.out.println(byron);
   }
}
Ecco cosa otteniamo: Output della console:
She walks in beauty, like the night, 
Of cloudless climes and starry skies 
And all that's best of dark and bright 
Meet in her aspect and her eyes...
Proprio quello che volevamo! Il compilatore ha riconosciuto la sequenza di escape e ha prodotto un estratto della poesia su 4 righe.

Escape caratteri Unicode

Un altro argomento importante che devi conoscere in relazione ai caratteri di escape è Unicode. Unicode è una codifica di caratteri standard che include i simboli di quasi tutte le lingue scritte del mondo. In altre parole, è un elenco di codici speciali che rappresentano quasi ogni carattere in qualsiasi lingua! Naturalmente, questo è un elenco molto lungo e nessuno lo impara a memoria :) Se vuoi sapere da dove viene e perché si è reso necessario, leggi questo articolo informativo: https://docs.oracle.com/javase/tutorial/ i18n/text/unicode.html Tutti i codici dei caratteri Unicode hanno la forma " u+<cifra esadecimale>". Ad esempio, il noto simbolo di copyright è rappresentato da u00A9. Quindi, se hai bisogno di usare questo carattere quando lavori con il testo in Java, puoi usare l'escape nel tuo testo! Ad esempio, vogliamo per informare tutti che CodeGym detiene il copyright di questa lezione:

public class Main {
   public static void main(String[] args) {
       System.out.println("\"Escaping characters\", \u00A9 2019 CodeGym");
   }
}
Uscita console:
"Escaping characters", © 2019 CodeGym
Ottimo, è andato tutto bene! Ma non si tratta solo di simboli speciali! È possibile utilizzare Unicode e caratteri di escape per codificare il testo scritto contemporaneamente in lingue diverse. E anche testi scritti in diversi dialetti della stessa lingua!

public class Main {
   public static void main(String[] args) {

       System.out.println("\u004d\u0061\u006f \u005a\u0065\u0064\u006f\u006e\u0067 " + 

               "\u0028\u0054\u0072\u0061\u0064\u0069\u0074\u0069\u006f\u006e\u0061\u006c " +

               "\u0043\u0068\u0069\u006e\u0065\u0073\u0065\u003a \u6bdb\u6fa4\u6771\u002c " +

               "\u0053\u0069\u006d\u0070\u006c\u0069\u0066\u0069\u0065\u0064 " +

               "\u0043\u0068\u0069\u006e\u0065\u0073\u0065\u003a \u6bdb\u6cfd\u4e1c\u002c " +

               "\u0050\u0069\u006e\u0079\u0069\u006e\u003a \u004d\u00e1\u006f " +

               "\u005a\u00e9\u0064\u014d\u006e\u0067\u0029 \u0077\u0061\u0073 \u0061 " +

               "\u0032\u0030\u0074\u0068\u002d\u0063\u0065\u006e\u0074\u0075\u0072\u0079 " +

               "\u0043\u0068\u0069\u006e\u0065\u0073\u0065 " +

                "\u0073\u0074\u0061\u0074\u0065\u0073\u006d\u0061\u006e\u002c " +

               "\u0070\u006f\u006c\u0069\u0074\u0069\u0063\u0069\u0061\u006e\u002c " +

               "\u0061\u006e\u0064 \u0074\u0068\u0065 \u0063\u0068\u0069\u0065\u0066 " +

               "\u0074\u0068\u0065\u006f\u0072\u0065\u0074\u0069\u0063\u0069\u0061\u006e " +

               "\u006f\u0066 \u004d\u0061\u006f\u0069\u0073\u006d\u002e");
   }
}
Uscita console:
Mao Zedong (Traditional Chinese: 毛澤東, Simplified Chinese: 毛泽东, Pinyin: Máo Zédōng) was a 20th-century Chinese statesman, politician, and the chief theoretician of Maoism.
In questo esempio, abbiamo utilizzato i codici dei caratteri per creare una stringa composta dall'inglese e da tre (!) diversi tipi di caratteri cinesi: tradizionale, semplificato e latino (Pinyin). E questo riassume tutto! Ora sai abbastanza sull'escape dei caratteri per utilizzare questo fantastico strumento nel tuo lavoro :) Per rafforzare ciò che hai imparato, ti suggeriamo di guardare una lezione video dal nostro corso Java
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION