CodeGym /Java blog /Véletlen /Java Escape karakterek
John Squirrels
Szint
San Francisco

Java Escape karakterek

Megjelent a csoportban
Szia! Az előző leckéken már megismerkedtünk a szöveges karakterláncokkal, amelyeket a String osztály képvisel a Java nyelven. Mint valószínűleg emlékszel, a karakterlánc karakterek sorozata. Ezek a karakterek lehetnek betűk, számok, írásjelek és így tovább. A karakterlánc létrehozásakor a legfontosabb, hogy a teljes sorozatot idézőjelek közé kell tenni:

public class Main {
   public static void main(String[] args) {
       String alex = new String ("My name is Alex. I'm 20!");
   }
}
De mit tegyünk, ha olyan karakterláncot kell létrehoznunk, amelynek magának idézőjeleket kell tartalmaznia? Tegyük fel például, hogy el akarjuk mesélni a világnak kedvenc könyvét:

public class Main {
   public static void main(String[] args) {
       String myFavoriteBook = new String ("My favorite book is "Twilight" by Stephanie Meyer");
   }
}
Úgy tűnik, a fordító elégedetlen valamivel! Ön szerint mi lehet a probléma? És mi köze ennek az idézőjelhez? Valójában minden nagyon egyszerű. A fordító az idézőjeleket nagyon sajátosan értelmezi, azaz elvárja, hogy sztringek kerüljenek bele. És minden alkalommal, amikor a fordító látja ", azt várja, hogy az idézőjel után egy második idézőjel legyen, és a közöttük lévő tartalom egy karakterlánc szövege, amelyet a fordító készít. Esetünkben az idézőjel kb. az "Alkonyat" szó más idézőjelek között van. Amikor a fordító eléri ezt a szövegrészt, egyszerűen nem érti, hogy mit kell tennie. Az idézőjel azt sugallja, hogy létre kell hozni egy karakterláncot. De ez az, amit a fordító márcsinál! Ennek oka: egyszerűen szólva a fordító összezavarodik azzal kapcsolatban, hogy mit kell tennie. "Még egy idézőjel? Ez valami hiba? Már csinálok egy karakterláncot! Vagy csináljak még egyet? Argh!...:/" Tudnunk kell a fordítóval, ha az idézőjel parancs ( "hozzon létre egy karakterláncot!"), és amikor egyszerűen egy karakter (" jelenítse meg a "Twilight" szót idézőjelekkel együtt!"). Ehhez a Java karakteres kihagyást használ . Ez egy speciális szimbólum használatával érhető el: \ . Ezt a szimbólumot általában "fordított perjelnek" nevezik. A Java nyelvben a „kihagyandó” karakterrel kombinált fordított perjelet vezérlőszekvenciának nevezzük . Például \"egy vezérlőszekvencia az idézőjelek képernyőn történő megjelenítéséhez. Amikor találkozik ezzel a konstrukcióval a kódban, a fordító megérti, hogy ez csak egy idézőjel, amelyet meg kell jeleníteni a képernyőn. Próbáljuk meg megváltoztatni a kódunkat a könyvvel:

public static void main(String[] args) {
       String myFavoriteBook = new String ("My favorite book is \"Twilight\" by Stephanie Meyer");
       System.out.println(myFavoriteBook);
   }
}
A \ karaktert használtuk, hogy elkerüljük a két „belső” idézőjelünket. Próbáljuk meg futtatni a main() metódust... Konzol kimenet:
My favorite book is "Twilight" by Stephanie Meyer
Kiváló! A kód pontosan úgy működött, ahogy szerettük volna! Korántsem az idézőjel az egyetlen olyan karakter, amelyre szükségünk lehet. Tegyük fel, hogy el szeretnénk mondani valakinek a munkánkat:

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);
   }
}
Újabb hiba! Kitalálod miért? A fordító megint nem érti, mit tegyen. Hiszen a fordító nem tud \ másként, mint egy vezérlőszekvencia ! Arra számít, hogy a fordított perjelet egy bizonyos karakter követi, amelyet valamilyen speciális módon kell értelmeznie (például idézőjel). De ebben az esetben a \-t közönséges betűk követik. A fordító tehát megint össze van zavarodva. Mit tehetünk? Pontosan ugyanaz, mint korábban: csak egy újabb \-t adunk hozzá a \ -hoz !

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

   }
}
Lássuk, mit kapunk: Konzol kimenet:
My work files are in D:\Work Projects\java
Szuper! A fordító azonnal megállapítja, hogy a \ közönséges karakterek, amelyeket a többivel együtt kell megjeleníteni. A Java meglehetősen sok vezérlőszekvenciát tartalmaz. Íme a teljes lista:
  • \t - fül.
  • \b - backspace (egy lépés hátrafelé a szövegben vagy egyetlen karakter törlése).
  • \n - új sor.
  • \r - kocsi vissza. ()
  • \f - űrlap feed.
  • \' egyetlen idézet.
  • \" kettős idézet.
  • \\ fordított perjel.
Így, ha a fordító a szövegben találkozik a \n jellel, megérti, hogy ez nem csak egy szimbólum és egy betű, amelyet a konzolon kell megjeleníteni, hanem egy speciális parancs, amely "új sorba lép!" . Ez például akkor lehet hasznos, ha egy vers egy részét szeretnénk megjeleníteni:

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);
   }
}
A következőket kapjuk: Konzol kimenet:
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...
Pont amit szerettünk volna! A fordító felismerte a menekülési szekvenciát, és kiadta a versrészletet 4 soron.

Escape Unicode karakterek

Egy másik fontos téma, amelyet az escape karakterekkel kapcsolatban tudnia kell, az Unicode. Az Unicode egy szabványos karakterkódolás, amely a világ szinte minden írott nyelvének szimbólumait tartalmazza. Más szóval, ez egy olyan speciális kódok listája, amelyek szinte minden karaktert képviselnek bármilyen nyelven! Természetesen ez egy nagyon hosszú lista, és senki sem tanulja meg fejből :) Ha tudni szeretné, honnan jött és miért vált szükségessé, olvassa el ezt az informatív cikket: https://docs.oracle.com/javase/tutorial/ i18n/text/unicode.html Minden Unicode karakterkód " u+<hexadecimális számjegy>". Például a jól ismert szerzői jogi szimbólumot az u00A9 képviseli. Tehát, ha ezt a karaktert kell használnia, amikor szöveggel dolgozik Java nyelven, akkor kihagyhatja a szövegben! Például szeretnénk tájékoztatni mindenkit, hogy a CodeGym tulajdonosa ennek a leckének a szerzői joga:

public class Main {
   public static void main(String[] args) {
       System.out.println("\"Escaping characters\", \u00A9 2019 CodeGym");
   }
}
Konzol kimenet:
"Escaping characters", © 2019 CodeGym
Szuper, minden sikerült! De nem csak a különleges szimbólumokról van szó! Használhat Unicode és escape karaktereket a különböző nyelveken egyidejűleg írt szövegek kódolására. És még egyazon nyelv több különböző dialektusában írt szöveg is!

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");
   }
}
Konzol kimenet:
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.
Ebben a példában karakterkódokat használtunk egy angol és három (!) különböző típusú – hagyományos, egyszerűsített és latin (pinjin) – kínai karakterből álló karakterlánc létrehozására. És nagyjából ennyi! Most már eleget tudsz a karakterek megszökéséről, hogy munkád során használd ezt a nagyszerű eszközt :) A tanultak megerősítése érdekében javasoljuk, hogy nézzen meg egy videóleckét a Java-tanfolyamról

További olvasnivalók:

Hozzászólások
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION