CodeGym /Blog Java /Aleatoriu /Personaje Java Escape
John Squirrels
Nivel
San Francisco

Personaje Java Escape

Publicat în grup
Bună! În lecțiile anterioare, ne-am familiarizat deja cu șirurile de text, care sunt reprezentate de clasa String în Java. După cum probabil vă amintiți, un șir este o secvență de caractere. Aceste caractere pot fi orice litere, cifre, semne de punctuație și așa mai departe. Principalul lucru la crearea unui șir este că întreaga secvență trebuie să fie cuprinsă între ghilimele:

public class Main {
   public static void main(String[] args) {
       String alex = new String ("My name is Alex. I'm 20!");
   }
}
Dar ce facem dacă trebuie să creăm un șir care în sine trebuie să conțină ghilimele? De exemplu, să presupunem că vrem să spunem lumii despre cartea ta preferată:

public class Main {
   public static void main(String[] args) {
       String myFavoriteBook = new String ("My favorite book is "Twilight" by Stephanie Meyer");
   }
}
Se pare că compilatorul este nemulțumit de ceva! Care crezi că ar putea fi problema? Și ce legătură are cu ghilimele? De fapt, totul este foarte simplu. Compilatorul interpretează ghilimele într-un mod foarte specific, adică se așteaptă ca șirurile de caractere să fie înfășurate în ele. Și de fiecare dată când compilatorul vede „, se așteaptă ca ghilimelele să fie urmate de un al doilea ghilimele și ca conținutul dintre ele să fie textul unui șir care urmează să fie creat de compilator. În cazul nostru, ghilimelele în jurul valorii de cuvântul „Twilight” se află în interiorul altor ghilimele . Când compilatorul ajunge la această bucată de text, pur și simplu nu înțelege ce se așteaptă să facă. Ghilimele sugerează că trebuie creat un șir. Dar asta este compilatorul dejaface! Iată de ce: pur și simplu vorbind, compilatorul devine confuz cu privire la ceea ce se așteaptă să facă. "Alt ghilimele? Este un fel de greșeală? Deja creez un șir! Sau ar trebui să creez altul? Argh!...:/" Trebuie să anunțăm compilatorul când ghilimelele sunt o comandă ( „creează un șir!”) și când este pur și simplu un caracter („afișează cuvântul „Twilight” împreună cu ghilimele!”). Pentru a face acest lucru, Java folosește evadarea caracterelor . Acest lucru se realizează folosind un simbol special: \ . Acest simbol se numește în mod normal „backslash”. În Java, o bară oblică inversă combinată cu un caracter care trebuie „scăpat” se numește secvență de control . De exemplu, \"este o secvență de control pentru afișarea ghilimelelor pe ecran. La întâlnirea acestui construct în codul dvs., compilatorul va înțelege că acesta este doar un ghilimele care ar trebui să fie afișat pe ecran. Să încercăm să ne schimbăm codul cu cartea:

public static void main(String[] args) {
       String myFavoriteBook = new String ("My favorite book is \"Twilight\" by Stephanie Meyer");
       System.out.println(myFavoriteBook);
   }
}
Am folosit \ pentru a scăpa de cele două ghilimele noastre „interne”. Să încercăm să rulăm metoda main() ... Ieșire din consolă:
My favorite book is "Twilight" by Stephanie Meyer
Excelent! Codul a funcționat exact așa cum ne-am dorit! Ghilimelele nu sunt în niciun caz singurele caractere de care este posibil să avem nevoie pentru a scăpa. Să presupunem că vrem să spunem cuiva despre munca noastră:

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);
   }
}
Inca o eroare! Poți ghici de ce? Încă o dată, compilatorul nu înțelege ce să facă. La urma urmei, compilatorul nu știe \ ca altceva decât o secvență de control ! Se așteaptă ca bara oblică inversă să fie urmată de un anumit caracter pe care trebuie să îl interpreteze cumva într-un mod special (cum ar fi ghilimele). Dar, în acest caz, \ este urmat de litere obișnuite. Deci compilatorul este din nou confuz. Ce ar trebui sa facem? Exact același lucru ca și înainte: adăugăm doar un alt \ în \ !

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);

   }
}
Să vedem ce obținem: Ieșire consolă:
My work files are in D:\Work Projects\java
Super! Compilatorul stabilește imediat că \ sunt caractere obișnuite care ar trebui să fie afișate împreună cu restul. Java are destul de multe secvențe de control. Iată lista completă:
  • \t - tab.
  • \b - backspace (un pas înapoi în text sau ștergerea unui singur caracter).
  • \n - linie nouă.
  • \r - retur carucior. ()
  • \f - form feed.
  • \' ghilimele unice.
  • \" ghilimele duble.
  • \\ bară oblică inversă.
Astfel, dacă compilatorul întâlnește \n în text, înțelege că acesta nu este doar un simbol și o literă de afișat pe consolă, ci mai degrabă o comandă specială pentru „trece la o linie nouă!”. De exemplu, acest lucru poate fi util dacă dorim să afișăm o parte dintr-o poezie:

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);
   }
}
Iată ce obținem: Ieșire din consolă:
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...
Exact ce ne-am dorit! Compilatorul a recunoscut secvența de evadare și a scos un fragment din poezie pe 4 rânduri.

Escape caractere Unicode

Un alt subiect important despre care trebuie să știți în legătură cu caracterele de evacuare este Unicode. Unicode este o codificare standard de caractere care include simbolurile aproape tuturor limbilor scrise din lume. Cu alte cuvinte, este o listă de coduri speciale care reprezintă aproape fiecare caracter în orice limbă! Desigur, aceasta este o listă foarte lungă și nimeni nu o învață pe de rost :) Dacă doriți să știți de unde a venit și de ce a devenit necesar, citiți acest articol informativ: https://docs.oracle.com/javase/tutorial/ i18n/text/unicode.html Toate codurile de caractere Unicode au forma „ u+<cifră hexazecimală>". De exemplu, binecunoscutul simbol al dreptului de autor este reprezentat de u00A9. Deci, dacă trebuie să utilizați acest caracter atunci când lucrați cu text în Java, îl puteți scăpa în textul dvs.! De exemplu, dorim pentru a informa pe toată lumea că CodeGym deține drepturile de autor pentru această lecție:

public class Main {
   public static void main(String[] args) {
       System.out.println("\"Escaping characters\", \u00A9 2019 CodeGym");
   }
}
Ieșire din consolă:
"Escaping characters", © 2019 CodeGym
Super, totul a mers! Dar nu este vorba doar despre simboluri speciale! Puteți utiliza caractere Unicode și escape pentru a codifica text scris simultan în diferite limbi. Și chiar text scris în mai multe dialecte diferite ale aceleiași limbi!

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");
   }
}
Ieșire din consolă:
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.
În acest exemplu, am folosit coduri de caractere pentru a construi un șir format din engleză și trei (!) tipuri diferite de caractere chinezești - tradiționale, simplificate și latine (Pinyin). Și cam asta rezumă! Acum știți suficient despre evadarea personajelor pentru a utiliza acest instrument grozav în munca dvs. :) Pentru a consolida ceea ce ați învățat, vă sugerăm să urmăriți o lecție video de la Cursul nostru Java

Mai multe lecturi:

Comentarii
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION