JavaRush /Java Blog /Random-TL /Mga character na tumatakas

Mga character na tumatakas

Nai-publish sa grupo
Kamusta! Sa mga nakaraang lektura, naging pamilyar na tayo sa mga string, na kinakatawan ng klase sa Java String. Tulad ng malamang na naaalala mo, ang isang string ay isang pagkakasunud-sunod ng mga character. Ang mga simbolo ay maaaring anuman - mga titik, numero, mga bantas, at iba pa. Ang pangunahing bagay ay kapag lumilikha ng isang string, ang buong pagkakasunud-sunod ay nakapaloob sa mga quote:
public class Main {
   public static void main(String[] args) {
       String sasha = new String ("Меня зовут Саша, мне 20 лет!");
   }
}
Ngunit ano ang mangyayari kung kailangan nating lumikha ng isang string na mayroon ding mga quote sa loob nito? Halimbawa, gusto naming sabihin sa mundo ang tungkol sa aming paboritong libro:
public class Main {
   public static void main(String[] args) {
       String myFavoriteBook = new String ("Моя любимая книга - "Сумерки" Стефани Майер");
   }
}
Ang compiler ay tila hindi nasisiyahan sa isang bagay! Ano sa palagay mo ang maaaring dahilan ng error, at bakit partikular na nangyari ito sa mga quote? Ang katotohanan ay ang compiler ay nakikita ang mga quote sa isang mahigpit na tinukoy na paraan, ibig sabihin, ito ay bumabalot ng isang string sa kanila. At sa tuwing makakakita siya ng isang karakter ", inaasahan niya na ang parehong karakter ay susunod para dito, at sa pagitan nila ay magkakaroon ng teksto ng linya na dapat niyang likhain, ang compiler. Sa aming kaso, ang mga panipi sa paligid ng salitang "Twilight" ay nasa loob ng iba pang mga panipi . At kapag dumating ang compiler sa piraso ng tekstong ito, hindi nito naiintindihan kung ano ang gusto nila mula dito. Parang may quote, ibig sabihin dapat gumawa ng string. Pero ginagawa na niya! Ito talaga ang dahilan. Sa madaling salita, sa puntong ito ay hindi nauunawaan ng compiler kung ano ang gusto nila mula dito. "Isa pang quote? Ito ba ay isang uri ng error? Gumagawa na ako ng isang string! O dapat ba akong gumawa ng isa pa? Uhhh...:/" Kailangan nating ipaliwanag sa compiler kapag ang isang quote ay isang utos para dito (" lumikha ng isang string!"), at kapag ito ay isang simpleng simbolo ("ipakita ang salitang "Twilight" kasama ng mga panipi!"). Upang makamit ito, ang Java ay gumagamit ng character escaping . Ginagawa ito gamit ang isang espesyal na karakter. Ganito: \. Sa ordinaryong buhay ito ay tinatawag na isang "backslash", ngunit sa Java ito (kasama ang character na dapat i-escape) ay tinatawag na isang escape sequence . Halimbawa, \"narito ito - isang control sequence para sa pagpapakita ng mga quote sa screen. Ang pagkakaroon ng nakatagpo ng ganoong construction sa loob ng iyong code, mauunawaan ng compiler na ito ay isang "quote" na character lamang na kailangang ipakita sa screen. Subukan nating baguhin ang ating code gamit ang aklat:
public static void main(String[] args) {
       String myFavoriteBook = new String ("Моя любимая книга - \"Сумерки\" Стефани Майер");
       System.out.println(myFavoriteBook);
   }
}
Nakatakas kami sa dalawang "inner" quotes na may \. Subukan nating patakbuhin ang pamamaraan main()... Console output:

Моя любимая книга - "Сумерки" Стефани Майер
Mahusay, ang code ay gumana nang eksakto kung kinakailangan! Ang mga quote ay malayo sa tanging kaso kung saan maaaring kailanganin natin ang pagtakas ng karakter. Halimbawa, gusto naming sabihin sa isang tao ang tungkol sa aming trabaho:
public class Main {
   public static void main(String[] args) {
       String workFiles= new String ("Мои рабочие файлы лежат в папке D:\Work Projects\java");
       System.out.println(workFiles);
   }
}
At muli isang pagkakamali! Maaari mo na bang hulaan kung ano ang dahilan? Hindi nauunawaan muli ng compiler kung ano ang gagawin. Pagkatapos ng lahat, ang isang simbolo \para sa kanya ay walang iba kundi isang control sequence ! Inaasahan nito na pagkatapos ng slash ay dapat mayroong ilang karakter na kakailanganin nitong bigyang-kahulugan sa ilang espesyal na paraan (halimbawa, isang panipi). Gayunpaman, dito \sumusunod ang mga regular na titik. Kaya nalilito na naman ang compiler. Anong gagawin? Eksaktong kapareho ng huling pagkakataon: magdagdag lang \ng isa pa sa atin \!
public class Main {

   public static void main(String[] args) {

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

   }
}
Tingnan natin kung ano ang lalabas dito: Output ng Console:

Мои рабочие файлы лежат в папке D:\Work Projects\java
Super! Agad na natukoy ng compiler na ang mga ito \ay mga ordinaryong character na kailangang i-output sa console kasama ang iba pa. Mayroong ilang mga sequence ng pagtakas sa Java. Narito ang kanilang kumpletong listahan:
  • \t karakter ng tab.
  • \b isang bumalik na character sa teksto ng isang hakbang pabalik o pagtanggal ng isang character sa isang linya (backspace).
  • \n bagong linyang karakter.
  • \r karakter ng pagbabalik ng karwahe.
  • \f page run.
  • \' solong quote na karakter.
  • \" double quote character.
  • \\character na backslash (\).
Kaya, kung ang compiler ay nakatagpo ng isang simbolo sa teksto \n, mauunawaan nito na ito ay hindi lamang isang simbolo at isang liham na kailangang i-output sa console, ngunit isang espesyal na utos para dito - "gumawa ng isang line break!" Halimbawa, maaari itong maging kapaki-pakinabang sa amin kung gusto naming mag-output ng isang piraso ng tula sa console:
public class Main {
   public static void main(String[] args) {
       String borodino = new String ("Скажи-ка, дядя, \nВедь не даром \nМосква, спаленная пожаром, \nФранцузу отдана?");
       System.out.println(borodino);
   }
}
At ito ang nakuha namin: Console output:

Скажи-ка, дядя, 
Ведь не даром 
Москва, спаленная пожаром, 
Французу отдана?
Eksakto kung ano ang kailangan! Nakilala ng compiler ang escape sequence at naglabas ng isang piraso ng verse sa 4 na linya.

Unicode

Ang isa pang mahalagang paksa na kailangan mong malaman tungkol sa koneksyon sa pagtakas ng character ay ang Unicode . Ang Unicode ay isang character encoding standard na kinabibilangan ng mga character mula sa halos lahat ng nakasulat na wika sa mundo. Sa madaling salita, ito ay isang listahan ng mga espesyal na code, kung saan mayroong isang code para sa halos anumang character mula sa anumang wika! Naturally, ang listahang ito ay napakalaki at walang sinuman ang natututo nito sa puso :) Kung interesado ka sa kung saan ito nanggaling at kung bakit ito kailangan, basahin ang impormasyong artikulo sa Habrahabr . Ang lahat ng mga code ng character sa Unicode ay "letter u+ hexadecimal digit". Halimbawa, ang sikat na simbolo ng copyright ay ipinahiwatig ng code u00A9 . Kaya, kung kailangan mong gamitin ang character na ito kapag nagtatrabaho sa text sa Java, maaari mong i-escape ito sa iyong text! Halimbawa, gusto naming ipaalam sa lahat na ang lecture na ito ay naka-copyright ng JavaRush:
public class Main {
   public static void main(String[] args) {
       System.out.println("Лекция \"Экранирование символов\", \u00A9 2018 Javarush");
   }
}
Output ng console:

Лекция "Экранирование символов", © 2018 Javarush
Mahusay, naging maayos ang lahat! Ngunit ang mga espesyal na karakter ay hindi lahat! Gamit ang Unicode at character escaping, maaari mong i-encode ang tekstong nakasulat sa iba't ibang wika nang sabay. At kahit na sa maraming iba't ibang dialekto ng parehong wika!
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");
   }
}
Output ng console:

Ма́о Цзэду́н (кит. трад. 毛澤東, упр. 毛泽东, пиньинь: Máo Zédōng) — китайский государственный и политический деятель XX века, главный теоретик маоизма.
Sa halimbawang ito, alam ang mga code ng character, sumulat kami ng isang string na binubuo ng Cyrillic alphabet at tatlong (!) iba't ibang uri ng pagsulat ng mga character na Tsino - klasikal, pinasimple at Latin (pinyin). Iyon talaga! Ngayon ay sapat na ang nalalaman mo tungkol sa pagtakas ng karakter upang magamit ang tool na ito sa iyong trabaho :) Kung ang lahat ay hindi ganap na malinaw, ipinapayo ko sa iyo na basahin ang artikulong ito : ito ay magiging isang magandang karagdagan.
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION