JavaRush /Java Blog /Random-IT /Personaggi in fuga

Personaggi in fuga

Pubblicato nel gruppo Random-IT
Ciao! Nelle lezioni precedenti abbiamo già acquisito familiarità con le stringhe, che in Java sono rappresentate dalla classe String. Come probabilmente ricorderai, una stringa è una sequenza di caratteri. I simboli possono essere qualsiasi cosa: lettere, numeri, segni di punteggiatura e così via. La cosa principale è che quando si crea una stringa, l'intera sequenza è racchiusa tra virgolette:
public class Main {
   public static void main(String[] args) {
       String sasha = new String ("Меня зовут Саша, мне 20 лет!");
   }
}
Ma cosa succede se dobbiamo creare una stringa che contenga anche virgolette al suo interno? Ad esempio, vogliamo raccontare al mondo il nostro libro preferito:
public class Main {
   public static void main(String[] args) {
       String myFavoriteBook = new String ("Моя любимая книга - "Сумерки" Стефани Майер");
   }
}
Il compilatore sembra essere scontento di qualcosa! Quale pensi che potrebbe essere la ragione dell'errore e perché si è verificato specificamente tra virgolette? Il fatto è che il compilatore percepisce le virgolette in un modo rigorosamente definito, ovvero avvolge una stringa al loro interno. E ogni volta che vede un carattere ", si aspetta che lo stesso carattere lo seguirà, e tra loro ci sarà il testo della riga che lui, il compilatore, dovrà creare. Nel nostro caso, le virgolette attorno alla parola "Twilight" sono all'interno di altre virgolette . E quando il compilatore arriva a questo pezzo di testo, semplicemente non capisce cosa vuole da esso. Sembra che ci sia una citazione, il che significa che dovrebbe creare una stringa. Ma lo sta già facendo! Questo è proprio il motivo. In poche parole, a questo punto il compilatore fraintende ciò che vuole da esso. "Un'altra citazione? È qualche tipo di errore? Sto già creando una stringa! O dovrei crearne un'altra? Errr...:/" Dobbiamo spiegare al compilatore quando una citazione è un comando (" crea una stringa!"), e quando si tratta di un semplice simbolo ("visualizza la parola "Twilight" insieme alle virgolette!"). Per raggiungere questo obiettivo, Java utilizza l'escape dei caratteri . Questo viene fatto utilizzando un carattere speciale. Come questo: \. Nella vita di tutti i giorni si chiama "barra rovesciata", ma in Java (in combinazione con il carattere di cui eseguire l'escape) è chiamata sequenza di escape . Ad esempio, \"eccola qui: una sequenza di controllo per visualizzare le virgolette sullo schermo. Avendo riscontrato una tale costruzione all'interno del tuo codice, il compilatore capirà che si tratta solo di un carattere "virgoletta" che deve essere visualizzato sullo schermo. Proviamo a cambiare il nostro codice con il libro:
public static void main(String[] args) {
       String myFavoriteBook = new String ("Моя любимая книга - \"Сумерки\" Стефани Майер");
       System.out.println(myFavoriteBook);
   }
}
Abbiamo evitato le due virgolette "interne" con un file \. Proviamo ad eseguire il metodo main()... Output della console:

Моя любимая книга - "Сумерки" Стефани Майер
Ottimo, il codice ha funzionato esattamente come necessario! Le virgolette non sono l'unico caso in cui potremmo aver bisogno della fuga dei caratteri. Ad esempio, volevamo raccontare a qualcuno del nostro lavoro:
public class Main {
   public static void main(String[] args) {
       String workFiles= new String ("Мои рабочие файлы лежат в папке D:\Work Projects\java");
       System.out.println(workFiles);
   }
}
E ancora un errore! Riesci già a indovinare qual è il motivo? Il compilatore ancora una volta non capisce cosa fare. Dopotutto, un simbolo \per lui non è altro che una sequenza di controllo ! Si aspetta che dopo la barra ci sia qualche carattere che dovrà interpretare in qualche modo speciale (ad esempio, una virgoletta). Tuttavia, qui \seguono le lettere regolari. Quindi il compilatore è di nuovo confuso. Cosa fare? Esattamente come l'ultima volta: basta aggiungerne \uno in più al nostro \!
public class Main {

   public static void main(String[] args) {

       String workFiles= new String ("Мои рабочие файлы лежат в папке D:\\Work Projects\\java");
       System.out.println(workFiles);

   }
}
Vediamo cosa ne viene fuori: Output della console:

Мои рабочие файлы лежат в папке D:\Work Projects\java
Super! Il compilatore ha immediatamente determinato che si \trattava di simboli ordinari che dovevano essere inviati alla console insieme al resto. Ci sono parecchie sequenze di escape in Java. Ecco il loro elenco completo:
  • \t carattere di tabulazione.
  • \b un carattere di ritorno nel testo un passo indietro o l'eliminazione di un carattere in una riga (backspace).
  • \n carattere di nuova riga.
  • \r carattere di ritorno a capo.
  • \f corsa della pagina.
  • \' carattere di virgoletta singola.
  • \" carattere di virgolette doppie.
  • \\carattere barra rovesciata (\).
Pertanto, se il compilatore incontra un simbolo nel testo \n, capirà che questo non è solo un simbolo e una lettera che deve essere inviato alla console, ma un comando speciale per questo: "fai un'interruzione di riga!" Ad esempio, questo può esserci utile se vogliamo inviare un pezzo di una poesia alla console:
public class Main {
   public static void main(String[] args) {
       String borodino = new String ("Скажи-ка, дядя, \nВедь не даром \nМосква, спаленная пожаром, \nФранцузу отдана?");
       System.out.println(borodino);
   }
}
E questo è ciò che abbiamo ottenuto: Output della console:

Скажи-ка, дядя, 
Ведь не даром 
Москва, спаленная пожаром, 
Французу отдана?
Esattamente ciò che serve! Il compilatore ha riconosciuto la sequenza di escape e ha prodotto un pezzo di versi in 4 righe.

Unicode

Un altro argomento importante che devi conoscere in relazione all'escape dei caratteri è Unicode . Unicode è uno standard di codifica dei caratteri che include caratteri provenienti da quasi tutte le lingue scritte del mondo. In altre parole, questo è un elenco di codici speciali in cui è presente un codice per quasi tutti i caratteri di qualsiasi lingua! Naturalmente, questo elenco è molto ampio e nessuno lo impara a memoria :) Se sei interessato a sapere da dove viene e perché era necessario, leggi l'articolo informativo su Habrahabr . Tutti i codici carattere in Unicode sono “lettera u+ cifra esadecimale”. Ad esempio, il famoso simbolo del copyright è indicato dal codice u00A9 . Quindi, se devi utilizzare questo carattere quando lavori con il testo in Java, puoi inserirlo nel testo! Ad esempio, vogliamo far sapere a tutti che questa lezione è protetta da copyright JavaRush:
public class Main {
   public static void main(String[] args) {
       System.out.println("Лекция \"Экранирование символов\", \u00A9 2018 Javarush");
   }
}
Uscita console:

Лекция "Экранирование символов", © 2018 Javarush
Ottimo, tutto ha funzionato! Ma i personaggi speciali non sono tutto! Utilizzando Unicode e l'escape dei caratteri, puoi codificare il testo scritto in diverse lingue contemporaneamente. E anche in diversi dialetti della stessa lingua!
public class Main {
   public static void main(String[] args) {

       System.out.println("\u041c\u0430\u0301\u043e " +
               "\u0426\u0437\u044d\u0434\u0443\u0301\u043d " +
               "\u0028\u043a\u0438\u0442\u002e \u0442\u0440\u0430\u0434\u002e " +
               "\u6bdb\u6fa4\u6771\u002c \u0443\u043f\u0440\u002e " +
               "\u6bdb\u6cfd\u4e1c\u002c \u043f\u0438\u043d\u044c\u0438\u043d\u044c\u003a " +
               "\u004d\u00e1\u006f \u005a\u00e9\u0064\u014d\u006e\u0067\u0029 " +
               "\u2014 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0439 " +
               "\u0433\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 " +
               "\u0438 \u043f\u043e\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 " +
               "\u0434\u0435\u044f\u0442\u0435\u043b\u044c \u0058\u0058 \u0432\u0435\u043a\u0430\u002c " +
               "\u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u043a " +
               "\u043c\u0430\u043e\u0438\u0437\u043c\u0430\u002e");
   }
}
Uscita console:

Ма́о Цзэду́н (кит. трад. 毛澤東, упр. 毛泽东, пиньинь: Máo Zédōng) — китайский государственный и политический деятель XX века, главный теоретик маоизма.
In questo esempio, conoscendo i codici dei caratteri, abbiamo scritto una stringa composta dall'alfabeto cirillico e tre (!) diversi tipi di scrittura dei caratteri cinesi: classico, semplificato e latino (pinyin). Fondamentalmente è tutto! Ora ne sai abbastanza sull'escape dei caratteri per utilizzare questo strumento nel tuo lavoro :) Se non tutto è completamente chiaro, ti consiglio di leggere questo articolo : sarà una buona aggiunta.
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION