JavaRush /Blog Java /Random-MS /Melarikan diri watak

Melarikan diri watak

Diterbitkan dalam kumpulan
hello! Dalam kuliah sebelum ini, kita sudah biasa dengan rentetan, yang diwakili oleh kelas dalam Java String. Seperti yang anda mungkin ingat, rentetan ialah urutan aksara. Simbol boleh jadi apa sahaja - huruf, nombor, tanda baca, dan sebagainya. Perkara utama ialah apabila mencipta rentetan, keseluruhan urutan disertakan dalam petikan:
public class Main {
   public static void main(String[] args) {
       String sasha = new String ("Меня зовут Саша, мне 20 лет!");
   }
}
Tetapi apa yang berlaku jika kita perlu mencipta rentetan yang juga mempunyai petikan di dalamnya? Sebagai contoh, kami ingin memberitahu dunia tentang buku kegemaran kami:
public class Main {
   public static void main(String[] args) {
       String myFavoriteBook = new String ("Моя любимая книга - "Сумерки" Стефани Майер");
   }
}
Penyusun nampaknya tidak berpuas hati dengan sesuatu! Pada pendapat anda, apakah sebab ralat itu, dan mengapa ia berlaku secara khusus dengan petikan? Hakikatnya ialah pengkompil melihat petikan dengan cara yang ditetapkan dengan ketat, iaitu, ia membungkus rentetan di dalamnya. Dan setiap kali dia melihat watak ", dia menjangkakan bahawa watak yang sama akan mengikutinya, dan di antara mereka akan ada teks baris yang dia, penyusun, mesti buat. Dalam kes kami, tanda petikan di sekitar perkataan "Twilight" berada di dalam tanda petikan lain . Dan apabila pengkompil datang kepada sekeping teks ini, ia tidak memahami apa yang mereka mahu daripadanya. Nampaknya seperti terdapat petikan, yang bermaksud ia harus mencipta rentetan. Tetapi dia sudah melakukannya! Inilah sebabnya. Ringkasnya, pada ketika ini pengkompil salah faham apa yang mereka mahu daripadanya. "Petikan lain? Adakah ini sejenis ralat? Saya sudah mencipta rentetan! Atau patutkah saya mencipta satu lagi? Uhhh...:/" Kita perlu menjelaskan kepada pengkompil apabila petikan adalah perintah untuknya (" buat rentetan!"), dan apabila ia adalah simbol mudah ("paparkan perkataan "Twilight" bersama-sama dengan tanda petikan!"). Untuk mencapai matlamat ini, Java menggunakan character escaping . Ini dilakukan menggunakan watak khas. Seperti ini: \. Dalam kehidupan biasa ia dipanggil "slash terbalik", tetapi di Jawa ia (dalam kombinasi dengan watak yang akan dilepaskan) dipanggil urutan melarikan diri . Sebagai contoh, \"inilah - urutan kawalan untuk memaparkan petikan pada skrin. Setelah menemui pembinaan sedemikian di dalam kod anda, pengkompil akan memahami bahawa ini hanyalah watak "petikan" yang perlu dipaparkan pada skrin. Mari cuba tukar kod kami dengan buku:
public static void main(String[] args) {
       String myFavoriteBook = new String ("Моя любимая книга - \"Сумерки\" Стефани Майер");
       System.out.println(myFavoriteBook);
   }
}
Kami melepaskan dua petikan "dalaman" dengan \. Mari cuba jalankan kaedah main()... Output konsol:

Моя любимая книга - "Сумерки" Стефани Майер
Hebat, kod itu berfungsi tepat seperti yang diperlukan! Petikan jauh daripada satu-satunya kes di mana kita mungkin memerlukan watak melarikan diri. Sebagai contoh, kami ingin memberitahu seseorang tentang kerja kami:
public class Main {
   public static void main(String[] args) {
       String workFiles= new String ("Мои рабочие файлы лежат в папке D:\Work Projects\java");
       System.out.println(workFiles);
   }
}
Dan sekali lagi kesilapan! Bolehkah anda meneka apa sebabnya? Penyusun sekali lagi tidak faham apa yang perlu dilakukan. Lagipun, simbol \untuknya tidak lebih daripada urutan kawalan ! Ia menjangkakan bahawa selepas garis miring mesti ada beberapa watak yang perlu ditafsirkan dengan cara yang istimewa (contohnya, tanda petikan). Walau bagaimanapun, di sini \surat biasa mengikuti. Jadi pengkompil lagi keliru. Apa nak buat? Sama seperti kali terakhir: cuma tambah \satu lagi pada kami \!
public class Main {

   public static void main(String[] args) {

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

   }
}
Mari lihat apa yang terhasil daripada ini: Output konsol:

Мои рабочие файлы лежат в папке D:\Work Projects\java
Super! Pengkompil serta-merta menentukan bahawa ini \adalah aksara biasa yang perlu dikeluarkan ke konsol bersama-sama dengan yang lain. Terdapat beberapa urutan pelarian di Jawa. Berikut adalah senarai lengkap mereka:
  • \t watak tab.
  • \b mengembalikan aksara dalam teks selangkah ke belakang atau memadamkan satu aksara dalam baris (ruang belakang).
  • \n watak baris baharu.
  • \r watak pemulangan kereta.
  • \f larian halaman.
  • \' watak petikan tunggal.
  • \" watak petikan berganda.
  • \\aksara sengkang terbalik (\).
Oleh itu, jika pengkompil menemui simbol dalam teks \n, ia akan memahami bahawa ini bukan sekadar simbol dan huruf yang perlu dikeluarkan kepada konsol, tetapi arahan khas untuknya - "buat pemecahan baris!" Sebagai contoh, ini mungkin berguna kepada kita jika kita ingin mengeluarkan sepotong puisi ke konsol:
public class Main {
   public static void main(String[] args) {
       String borodino = new String ("Скажи-ка, дядя, \nВедь не даром \nМосква, спаленная пожаром, \nФранцузу отдана?");
       System.out.println(borodino);
   }
}
Dan inilah yang kami dapat: Output konsol:

Скажи-ка, дядя, 
Ведь не даром 
Москва, спаленная пожаром, 
Французу отдана?
Tepat apa yang diperlukan! Penyusun mengenali urutan pelarian dan mengeluarkan sepotong ayat dalam 4 baris.

Unicode

Satu lagi topik penting yang perlu anda ketahui berkaitan dengan pelarian aksara ialah Unicode . Unicode ialah standard pengekodan aksara yang merangkumi aksara daripada hampir semua bahasa bertulis di dunia. Dalam erti kata lain, ini ialah senarai kod khas, di mana terdapat kod untuk hampir mana-mana aksara daripada mana-mana bahasa! Sememangnya, senarai ini sangat besar dan tiada siapa yang mempelajarinya dengan hati :) Jika anda berminat dari mana ia datang dan mengapa ia diperlukan, baca artikel bermaklumat tentang Habrahabr . Semua kod aksara dalam Unicode ialah "huruf u+ digit perenambelasan". Sebagai contoh, simbol hak cipta yang terkenal ditunjukkan oleh kod u00A9 . Jadi, jika anda perlu menggunakan aksara ini semasa bekerja dengan teks dalam Java, anda boleh melepaskannya dalam teks anda! Sebagai contoh, kami ingin memberitahu semua orang bahawa kuliah ini berhak cipta oleh JavaRush:
public class Main {
   public static void main(String[] args) {
       System.out.println("Лекция \"Экранирование символов\", \u00A9 2018 Javarush");
   }
}
Output konsol:

Лекция "Экранирование символов", © 2018 Javarush
Hebat, semuanya berjaya! Tetapi watak istimewa bukanlah segala-galanya! Menggunakan Unicode dan karakter melarikan diri, anda boleh mengekod teks yang ditulis dalam bahasa yang berbeza pada masa yang sama. Dan walaupun dalam beberapa dialek berbeza dalam bahasa yang sama!
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 konsol:

Ма́о Цзэду́н (кит. трад. 毛澤東, упр. 毛泽东, пиньинь: Máo Zédōng) — китайский государственный и политический деятель XX века, главный теоретик маоизма.
Dalam contoh ini, mengetahui kod aksara, kami menulis rentetan yang terdiri daripada abjad Cyrillic dan tiga (!) jenis penulisan aksara Cina yang berbeza - klasik, dipermudah dan Latin (pinyin). Itu pada asasnya! Sekarang anda cukup tahu tentang melarikan diri watak untuk menggunakan alat ini dalam kerja anda :) Jika semuanya tidak jelas sepenuhnya, saya menasihati anda untuk membaca artikel ini : ia akan menjadi tambahan yang baik.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION