1. Sebab untuk melarikan watak

Pada suatu masa dahulu, anda mengetahui bahawa untuk menulis rentetan aksara dalam kod, anda perlu membungkusnya dalam petikan berganda. Hasilnya ialah rentetan literal .

Tetapi apa yang kita lakukan jika kita memerlukan tanda petikan di dalam rentetan literal? Rentetan yang mengandungi petikan — apakah yang lebih mudah?

Katakan kita mahu memaparkan teks "Friends" was nominated for an "Oscar". Bagaimana anda melakukannya?

Kod Nota
String s = ""Friends" was nominated for an "Oscar"";
Pilihan ini tidak akan berfungsi!

Isunya ialah pengkompil menganggap anda sedang menulis kod yang tidak dijangka:

Kod Nota
String s = ""Friends" was nominated for an "Oscar"";
Pilihan ini tidak akan berfungsi!

Selepas pengkompil menemui petikan berganda dalam kod, ia menganggap perkara berikut sebagai permulaan rentetan literal. Tanda petikan berganda seterusnya menunjukkan penghujung rentetan literal.

Jadi bagaimana anda menulis petikan berganda di dalam literal?


2. Melarikan diri watak

Ada cara. Ia dipanggil watak melarikan diri . Anda hanya menulis tanda petikan dalam rentetan teks. Dan sebelum petikan, anda menambah simbol \( segaris ke belakang ).

Inilah rupa literal rentetan apabila ditulis dengan betul:

Kod Nota
String s = "\"Friends\" was nominated for an \"Oscar\"";
Ini akan berjaya!

Pengkompil akan mentafsirkan semuanya dengan betul dan tidak akan menganggap tanda petikan selepas garis miring belakang sebagai tanda petikan biasa.

Lebih-lebih lagi, jika anda mengeluarkan rentetan ini ke skrin, petikan dengan garis miring ke belakang akan diproses dengan betul dan teks akan dipaparkan tanpa sebarang garis miring ke belakang:"Friends" was nominated for an "Oscar"

Satu lagi perkara penting. Tanda petikan yang didahului oleh garis miring belakang mewakili satu aksara: kami hanya menggunakan tatatanda licin yang tidak mengganggu keupayaan pengkompil untuk mengecam literal rentetan dalam kod kami. Anda boleh menetapkan petikan kepada charpembolehubah:

Kod Nota
char c = '\"';
\"adalah satu watak, bukan dua
char c = '"';
Ini juga mungkin: tanda petikan berganda di dalam petikan tunggal

3. Situasi biasa yang berlaku apabila melarikan diri daripada watak

Situasi biasa yang melibatkan watak melarikan diri

Selain petikan berganda, terdapat banyak aksara lain yang dikendalikan oleh pengkompil dengan cara yang istimewa. Contohnya, putus baris.

Bagaimanakah kita menambah pemisah baris kepada literal? Terdapat juga kombinasi khas untuk ini:

\n
Watak putus baris

Jika anda perlu menambah pemisah baris pada rentetan literal, anda hanya perlu menambah beberapa aksara: \n.

Contoh:

Kod Output konsol
System.out.println("Best regards, \n Anonymous");
Best regards,
Anonymous

Terdapat sejumlah 8 kombinasi istimewa seperti ini, yang juga dipanggil jujukan melarikan diri . Di sini mereka:

Kod Penerangan
\t Sisipkan aksara tab
\b Masukkan aksara ruang belakang
\n Masukkan aksara baris baharu
\r Masukkan aksara pemulangan pengangkutan
\f Masukkan aksara suapan halaman
\' Masukkan satu tanda petikan
\" Masukkan tanda petikan berganda
\\ Masukkan garis miring ke belakang

Anda biasa dengan dua daripadanya, tetapi apakah maksud 6 yang lain?

\tialah watak tab

Apabila teks ini muncul dalam teks, ia sama dengan menekan Tabkekunci semasa menaip. Ia mengalihkan teks yang mengikutinya dan memungkinkan untuk menjajarkan teks.

Contoh:

Kod Output konsol
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

\bbermaksud 'kembali satu watak'

Urutan dalam rentetan ini bersamaan dengan menekan Backspacekekunci pada papan kekunci. Ia mengalih keluar aksara yang mendahuluinya:

Kod Output konsol
System.out.println("Hello\b\b World");
Hell World!

\rialah watak pemulangan kereta

Watak ini menggerakkan kursor ke permulaan baris semasa tanpa mengubah teks. Apa sahaja yang dipaparkan seterusnya akan menimpa rentetan yang sedia ada.

Contoh:

Kod Output konsol
System.out.println("Greetings\r World!");
World!

\fialah watak suapan halaman

Simbol ini diturunkan kepada kita sejak zaman pencetak dot matriks pertama. Mengeluarkan jujukan ini kepada pencetak akan menyebabkan pencetak hanya menyuap keluar helaian semasa, tanpa mencetak sebarang teks, sehingga halaman baharu bermula.

Sekarang kita akan memanggilnya sebagai pemisah halaman atau halaman baharu .

\\adalah garis miring ke belakang

Semuanya mudah di sini. Jika kita menggunakan garis miring ke belakang untuk melepaskan aksara dalam teks kita, maka bagaimanakah kita menulis aksara garis miring terbalik itu sendiri dalam rentetan?

Ianya mudah: tambahkan garis miring ke belakang pada teks — anda perlu menulis dua berturut-turut.

Contoh:

Kod Output konsol
System.out.println("c:\projects\my\first");
Pengkompil akan menjerit kepada anda untuk watak yang tidak diketahui yang melarikan diri.
System.out.println("c:\\projects\\my\\first");
Itulah cara ia dilakukan dengan betul!


4. Pengekodan Unikod

Seperti yang anda sedia maklum, setiap aksara yang dipaparkan pada skrin sepadan dengan kod berangka tertentu. Satu set piawai bagi kod ini dipanggil pengekodan .

Pada suatu masa dahulu, apabila komputer baru dicipta, tujuh bit (kurang daripada satu bait) sudah cukup untuk mengekod setiap aksara. Pengekodan pertama mengandungi hanya 128 aksara. Pengekodan ini dipanggil ASCII .

ASCII adalah singkatan kepada American Standard Code for Information Interchange — jadual kod Amerika standard untuk aksara boleh cetak dan beberapa kod khas.

Ia terdiri daripada 33 aksara kawalan tidak boleh cetak (yang mempengaruhi cara teks dan ruang diproses) dan 95 aksara boleh cetak, termasuk nombor, huruf Latin huruf besar dan kecil serta beberapa tanda baca.

Pengekodan Unikod

Apabila komputer semakin popular, setiap negara mula mengeluarkan pengekodan sendiri. Biasanya, mereka mengambil ASCII sebagai titik permulaan dan menggantikan aksara ASCII yang jarang digunakan dengan simbol daripada abjad masing-masing.

Lama kelamaan, idea muncul: buat satu pengekodan yang mengandungi semua aksara setiap pengekodan di dunia.

Pengekodan Unikod 1

Oleh itu, pada tahun 1993, pengekodan Unicode telah dicipta, dan bahasa Java menjadi bahasa pengaturcaraan pertama yang menggunakan pengekodan ini sebagai standard untuk menyimpan teks. Kini Unicode adalah standard untuk keseluruhan industri IT.

Walaupun Unicode sendiri adalah standard, ia mempunyai beberapa perwakilan atau format transformasi Unicode (UTF): UTF-8, UTF-16 dan UTF-32, dsb.

Java menggunakan versi lanjutan pengekodan Unicode — UTF-16: setiap aksara dikodkan dalam 16 bit (2 bait). Ia boleh memuatkan sehingga 65,536 aksara!

Anda boleh menemui hampir setiap aksara setiap abjad di dunia dalam pengekodan ini. Sememangnya, tiada siapa yang menghafal semuanya. Anda tidak boleh tahu semuanya, tetapi anda boleh google semuanya.

Untuk menulis aksara Unicode dalam program anda menggunakan kodnya, anda perlu menulis \u+ kod dalam perenambelasan . Sebagai contoh,\u00A9

Kod Output konsol
System.out.println("\u00A9 CodeGym");
© CodeGym


5. Unicode: titik kod

"640 kilobait sepatutnya cukup untuk semua orang! Atau tidak". (Petikan dikaitkan dengan Bill Gates)

Kehidupan adalah sukar, dan dari masa ke masa, pengekodan UTF-16 mula tidak mencukupi. Ternyata terdapat banyak bahasa Asia, dan mereka mempunyai banyak glyph. Dan semua glyph ini tidak boleh dijejalkan ke dalam 2 bait.

Apa yang boleh dibuat? Gunakan lebih banyak bait !

Tetapi jenis char hanya 2 bait dan menukarnya kepada 4 tidak begitu mudah: berbilion baris kod Java telah ditulis di seluruh dunia, yang akan pecah jika jenis char tiba-tiba menjadi 4 bait mesin Java. Jadi kita tidak boleh menukar jenis char!

Terdapat pendekatan lain. Ingat bagaimana kita melepaskan watak dengan meletakkan garis serong ke belakang di hadapannya. Pada asasnya, kami mengekod satu aksara menggunakan berbilang aksara.

Pencipta Java memutuskan untuk menggunakan pendekatan yang sama.

Sesetengah aksara yang kelihatan secara visual sebagai satu aksara dikodkan sebagai dua chars dalam rentetan:

Kod Output konsol
System.out.println("\uD83D\uDD0A");
🔊

Kini program Java anda juga boleh mengeluarkan emoji ke konsol 😎