1. A karakterek elkerülésének okai

Egyszer régen megtanultad, hogy ahhoz, hogy egy karaktersorozatot kódban írhass, idézőjelbe kell tenni őket. Az eredmény egy karakterlánc literál .

De mit tegyünk, ha egy karakterlánc-literálon belül idézőjelekre van szükségünk? Egy idézőjeleket tartalmazó karakterlánc – mi lehetne könnyebb?

Tegyük fel, hogy meg akarjuk jeleníteni a szöveget "Friends" was nominated for an "Oscar". Hogyan csinálod, hogy?

Kód Megjegyzések
String s = ""Friends" was nominated for an "Oscar"";
Ez az opció nem fog működni!

A probléma az, hogy a fordító úgy gondolja, hogy teljesen váratlan kódot írsz:

Kód Megjegyzések
String s = ""Friends" was nominated for an "Oscar"";
Ez az opció nem fog működni!

Miután a fordító kettős idézőjelekkel találkozik a kódban, a következőt egy karakterlánc-literál kezdeteként kezeli. A következő dupla idézőjel a string literál végét jelzi.

Tehát hogyan írhat dupla idézőjeleket a literálba?


2. Menekülő karakterek

Van rá mód. Ezt menekülő karaktereknek hívják . Csak írja be az idézőjeleket a szövegbe. Az idézőjelek elé pedig hozzáadja a \( fordított perjel ) szimbólumot.

Így néz ki a karakterlánc-literál helyesen írva:

Kód Megjegyzések
String s = "\"Friends\" was nominated for an \"Oscar\"";
Ez menni fog!

A fordító mindent helyesen értelmez, és a fordított perjel utáni idézőjelet nem tekinti normál idézőjelnek.

Sőt, ha ezt a karakterláncot kiadja a képernyőre, akkor a fordított perjelekkel ellátott idézetek helyesen lesznek feldolgozva, és a szöveg fordított perjel nélkül jelenik meg:"Friends" was nominated for an "Oscar"

Egy másik fontos szempont. A fordított perjel előtti idézőjel egyetlen karaktert jelöl: egyszerűen olyan sima jelölést használunk, amely nem zavarja a fordító azon képességét, hogy felismerje a karakterlánc-literálokat a kódunkban. Egy változóhoz idézőjeleket rendelhet char:

Kód Megjegyzések
char c = '\"';
\"egy karakter, nem kettő
char c = '"';
Ez is lehetséges: dupla idézőjel az idézőjelben

3. Gyakori helyzetek, amelyek karakterek menekülésekor fordulnak elő

Gyakori szituációk, amelyekben szereplők menekülnek

A dupla idézőjeleken kívül sok más karakter is található, amelyeket a fordító speciális módon kezel. Például egy sortörés.

Hogyan adjunk sortörést a literálhoz? Erre is van egy speciális kombináció:

\n
Sortörés karakter

Ha sortörést kell hozzáadnia egy string literálhoz, csak néhány karaktert kell hozzáadnia: \n.

Példa:

Kód Konzol kimenet
System.out.println("Best regards, \n Anonymous");
Best regards,
Anonymous

Összesen 8 ilyen speciális kombináció létezik, amelyeket escape szekvenciáknak is neveznek . Itt vannak:

Kód Leírás
\t Tabulátor karakter beszúrása
\b Szúrjon be egy backspace karaktert
\n Újsor karakter beszúrása
\r Szúrjon be egy kocsivissza karaktert
\f Szúrjon be egy oldalfeed karaktert
\' Tegyen be egyetlen idézőjelet
\" Tegyen be dupla idézőjelet
\\ Szúrjon be egy fordított perjelet

Kettőt ismersz, de mit jelent a másik 6?

\tegy tabulátor karakter

Ha ez a szöveg megjelenik a szövegben, az egyenértékű a Tabbillentyű lenyomásával gépelés közben. Eltolja az utána következő szöveget, és lehetővé teszi a szöveg igazítását.

Példa:

Kód Konzol kimenet
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

\bazt jelenti, hogy "egy karakterrel visszafelé"

Ez a sorozat egy karakterláncban megegyezik Backspacea billentyűzet billentyűjének megnyomásával. Eltávolítja az előtte lévő karaktert:

Kód Konzol kimenet
System.out.println("Hello\b\b World");
Hell World!

\ra kocsivissza karakter

Ez a karakter a szöveg megváltoztatása nélkül mozgatja a kurzort az aktuális sor elejére. Bármi is látható ezután, felülírja a meglévő karakterláncot.

Példa:

Kód Konzol kimenet
System.out.println("Greetings\r World!");
World!

\fegy oldalfeed karakter

Ez a szimbólum az első mátrixnyomtatók idejéből származik. Ha ezt a sorozatot kiadja a nyomtatóra, a nyomtató egyszerűen kiadja az aktuális lapot anélkül, hogy bármilyen szöveget nyomtatna, amíg egy új oldal el nem kezd.

Most oldaltörésnek vagy új oldalnak neveznénk .

\\egy fordított perjel

Itt minden egyértelmű. Ha fordított törtvonalat használunk a karakterek kikerülésére a szövegben, akkor hogyan írjuk be magát a fordított perjelet a karakterláncba?

Egyszerű: adj hozzá egy fordított perjelet a szöveghez – kettőt kell egymás után írnod.

Példa:

Kód Konzol kimenet
System.out.println("c:\projects\my\first");
A fordító kiabálni fog neked ismeretlen, szökött karakterekért.
System.out.println("c:\\projects\\my\\first");
Így van ez jól megcsinálva!


4. Unicode kódolás

Mint már tudja, a képernyőn megjelenő minden karakter egy adott számkódnak felel meg. Ezeknek a kódoknak a szabványosított halmazát kódolásnak nevezzük .

Egyszer régen, amikor a számítógépeket újonnan feltalálták, hét bit (egy bájtnál kevesebb) elég volt minden karakter kódolásához. Az első kódolás mindössze 128 karaktert tartalmazott. Ezt a kódolást ASCII-nek hívták .

Az ASCII az American Standard Code for Information Interchange rövidítése – egy szabványos amerikai kódtábla nyomtatható karakterekhez és néhány speciális kódhoz.

33 nem nyomtatható vezérlőkarakterből (amelyek a szöveg és a szóközök feldolgozását befolyásolják) és 95 nyomtatható karakterből áll, beleértve a számokat, a kis- és nagybetűket, valamint számos írásjelet.

Unicode kódolás

A számítógépek népszerűségének növekedésével minden ország elkezdte kiadni saját kódolását. Általában az ASCII-t vették kiindulópontnak, és a ritkán használt ASCII-karaktereket a megfelelő ábécéjükből származó szimbólumokkal helyettesítették.

Idővel felmerült egy ötlet: hozzon létre egyetlen kódolást, amely tartalmazza a világ összes kódolásának összes karakterét.

Unicode kódolás 1

Így 1993-ban létrehozták az Unicode kódolást, és a Java nyelv lett az első olyan programozási nyelv, amely ezt a kódolást használta szabványként a szöveg tárolására. Most az Unicode a szabvány az egész IT-ipar számára.

Bár maga az Unicode a szabvány, számos ábrázolása vagy Unicode transzformációs formátuma (UTF) van: UTF-8, UTF-16 és UTF-32 stb.

A Java a Unicode kódolás fejlett verzióját használja – UTF-16: minden karakter 16 bites (2 bájt) kódolású. Legfeljebb 65 536 karakter fér el benne!

Ebben a kódolásban a világ összes ábécéjének szinte minden karaktere megtalálható. Természetesen senki sem jegyezte meg az egészet. Nem tudhatsz mindent, de a google-ban mindent tudsz.

Ha Unicode karaktert szeretne írni a programjába a kódjával, akkor \u+ a kódot hexadecimálisan kell írnia . Például,\u00A9

Kód Konzol kimenet
System.out.println("\u00A9 CodeGym");
© CodeGym


5. Unicode: kódpont

"640 kilobájtnak mindenkinek elégnek kell lennie! Vagy nem." (Idézet Bill Gatesnek tulajdonítva)

Az élet durva, és idővel az UTF-16 kódolás kezdett nem megfelelő. Kiderült, hogy nagyon sok ázsiai nyelv létezik, és sok karakterjelük van. És mindezek a jelek egyszerűen nem zsúfolhatók 2 bájtba.

Mit lehet tenni? Használj több bájtot !

De a char típus csak 2 bájtos, és 4-re cserélni nem is olyan egyszerű: Java kódsorok milliárdjait írtak már szerte a világon, ami eltörne, ha a char típusból hirtelen 4 bájtos Java gép lesz. Tehát a karakter típusát nem tudjuk megváltoztatni!

Van egy másik megközelítés is. Ne feledje, hogyan menekülhetünk meg a karakterek elől úgy, hogy egy fordított perjelet teszünk eléjük. Alapvetően egyetlen karaktert kódoltunk több karakter használatával.

A Java készítői ugyanezt a megközelítést választották.

Egyes karakterek, amelyek vizuálisan egyetlen karakterként jelennek meg, két chars-ként vannak kódolva egy karakterláncban:

Kód Konzol kimenet
System.out.println("\uD83D\uDD0A");
🔊

Mostantól a Java program akár hangulatjeleket is kiadhat a konzolra 😎