1. Alasan untuk melarikan diri dari karakter

Sekali waktu, Anda mengetahui bahwa untuk menulis serangkaian karakter dalam kode, Anda harus membungkusnya dengan tanda kutip ganda. Hasilnya adalah string literal .

Tapi apa yang kita lakukan jika kita membutuhkan tanda kutip di dalam string literal? Sebuah string berisi tanda kutip — apa yang bisa lebih mudah?

Katakanlah kita ingin menampilkan teks "Friends" was nominated for an "Oscar". Bagaimana kamu melakukannya?

Kode Catatan
String s = ""Friends" was nominated for an "Oscar"";
Opsi ini tidak akan berfungsi!

Masalahnya adalah kompiler mengira Anda menulis kode yang sama sekali tidak terduga:

Kode Catatan
String s = ""Friends" was nominated for an "Oscar"";
Opsi ini tidak akan berfungsi!

Setelah kompiler menemukan tanda kutip ganda dalam kode, ia memperlakukan yang berikut sebagai awal dari string literal. Tanda kutip ganda berikutnya menunjukkan akhir dari string literal.

Jadi bagaimana Anda menulis tanda kutip ganda di dalam literal?


2. Melarikan diri dari karakter

Ada jalan. Ini disebut karakter yang melarikan diri . Anda cukup menulis tanda kutip di dalam string teks. Dan sebelum tanda kutip, Anda menambahkan simbol \( backslash ).

Seperti inilah tampilan literal string ketika ditulis dengan benar:

Kode Catatan
String s = "\"Friends\" was nominated for an \"Oscar\"";
Ini akan berhasil!

Kompiler akan menafsirkan semuanya dengan benar dan tidak akan menganggap tanda kutip setelah garis miring terbalik sebagai tanda kutip biasa.

Terlebih lagi, jika Anda mengeluarkan string ini ke layar, tanda kutip dengan garis miring terbalik akan diproses dengan benar, dan teks akan ditampilkan tanpa garis miring terbalik:"Friends" was nominated for an "Oscar"

Poin penting lainnya. Tanda kutip yang diawali dengan garis miring terbalik mewakili satu karakter: kami hanya menggunakan notasi apik yang tidak mengganggu kemampuan kompiler untuk mengenali literal string dalam kode kami. Anda dapat menetapkan tanda kutip ke charvariabel:

Kode Catatan
char c = '\"';
\"adalah satu karakter, bukan dua
char c = '"';
Ini juga mungkin: tanda kutip ganda di dalam tanda kutip tunggal

3. Situasi umum yang terjadi saat karakter melarikan diri

Situasi umum yang melibatkan karakter yang melarikan diri

Selain tanda kutip ganda, ada banyak karakter lain yang ditangani oleh kompiler dengan cara khusus. Misalnya, jeda baris.

Bagaimana kita menambahkan jeda baris ke literal? Ada juga kombinasi khusus untuk ini:

\n
Karakter jeda baris

Jika Anda perlu menambahkan jeda baris ke literal string, Anda hanya perlu menambahkan beberapa karakter: \n.

Contoh:

Kode Keluaran konsol
System.out.println("Best regards, \n Anonymous");
Best regards,
Anonymous

Ada total 8 kombinasi spesial seperti ini, yang disebut juga escape sequence . Di sini mereka:

Kode Keterangan
\t Sisipkan karakter tab
\b Sisipkan karakter backspace
\n Sisipkan karakter baris baru
\r Masukkan karakter carriage return
\f Sisipkan karakter feed halaman
\' Sisipkan tanda kutip tunggal
\" Sisipkan tanda kutip ganda
\\ Sisipkan garis miring terbalik

Anda akrab dengan dua di antaranya, tetapi apa arti 6 lainnya?

\tadalah karakter tab

Saat teks ini muncul dalam teks, itu sama dengan menekan Tabtombol saat mengetik. Ini menggeser teks yang mengikutinya dan memungkinkan untuk menyelaraskan teks.

Contoh:

Kode Keluaran 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

\bberarti 'kembali satu karakter'

Urutan dalam string ini setara dengan menekan Backspacetombol pada keyboard. Itu menghilangkan karakter yang mendahuluinya:

Kode Keluaran konsol
System.out.println("Hello\b\b World");
Hell World!

\radalah karakter carriage return

Karakter ini menggerakkan kursor ke awal baris saat ini tanpa mengubah teks. Apa pun selanjutnya yang ditampilkan selanjutnya akan menimpa string yang ada.

Contoh:

Kode Keluaran konsol
System.out.println("Greetings\r World!");
World!

\fadalah karakter feed halaman

Simbol ini diturunkan kepada kita sejak zaman printer dot matrix pertama. Mengeluarkan urutan ini ke printer akan menyebabkan printer hanya mengumpankan lembar saat ini, tanpa mencetak teks apa pun, hingga halaman baru dimulai.

Sekarang kita akan menyebutnya page break atau new page .

\\adalah garis miring terbalik

Semuanya mudah di sini. Jika kita menggunakan garis miring terbalik untuk melepaskan karakter dalam teks kita, lalu bagaimana kita menulis karakter garis miring terbalik itu sendiri dalam string?

Sederhana saja: tambahkan garis miring terbalik ke teks — Anda harus menulis dua baris berturut-turut.

Contoh:

Kode Keluaran konsol
System.out.println("c:\projects\my\first");
Kompiler akan meneriaki Anda karena karakter yang lolos tidak dikenal.
System.out.println("c:\\projects\\my\\first");
Begitulah cara melakukannya dengan benar!


4. Pengkodean unicode

Seperti yang sudah Anda ketahui, setiap karakter yang ditampilkan di layar sesuai dengan kode numerik tertentu. Serangkaian standar dari kode-kode ini disebut pengkodean .

Dahulu kala, ketika komputer baru ditemukan, tujuh bit (kurang dari satu byte) sudah cukup untuk menyandikan setiap karakter. Pengkodean pertama hanya berisi 128 karakter. Pengkodean ini disebut ASCII .

ASCII adalah singkatan dari American Standard Code for Information Interchange — tabel kode Amerika standar untuk karakter yang dapat dicetak dan beberapa kode khusus.

Ini terdiri dari 33 karakter kontrol yang tidak dapat dicetak (yang mempengaruhi bagaimana teks dan spasi diproses) dan 95 karakter yang dapat dicetak, termasuk angka, huruf Latin huruf besar dan kecil, dan beberapa tanda baca.

Pengkodean Unicode

Ketika komputer semakin populer, setiap negara mulai merilis pengkodeannya sendiri. Biasanya, mereka mengambil ASCII sebagai titik awal dan mengganti karakter ASCII yang jarang digunakan dengan simbol dari huruf masing-masing.

Seiring waktu, sebuah ide muncul: buat satu pengkodean yang berisi semua karakter dari setiap pengkodean di dunia.

Pengkodean Unicode 1

Maka, pada tahun 1993, pengkodean Unicode dibuat, dan bahasa Java menjadi bahasa pemrograman pertama yang menggunakan pengkodean ini sebagai standar untuk menyimpan teks. Sekarang Unicode adalah standar untuk seluruh industri TI.

Meskipun Unicode sendiri adalah standarnya, ia memiliki beberapa representasi atau format transformasi Unicode (UTF): UTF-8, UTF-16 dan UTF-32, dll.

Java menggunakan pengkodean Unicode versi lanjutan — UTF-16: setiap karakter dikodekan dalam 16 bit (2 byte). Itu dapat menampung hingga 65.536 karakter!

Anda dapat menemukan hampir setiap karakter dari setiap alfabet di dunia dalam penyandian ini. Secara alami, tidak ada yang menghafal semuanya. Anda tidak bisa mengetahui segalanya, tetapi Anda bisa google segalanya.

Untuk menulis karakter Unicode dalam program Anda menggunakan kodenya, Anda perlu menulis \u+ kode dalam heksadesimal . Misalnya,\u00A9

Kode Keluaran konsol
System.out.println("\u00A9 CodeGym");
© CodeGym


5. Unicode: titik kode

"640 kilobyte seharusnya cukup untuk semua orang! Atau tidak". (Kutipan dikaitkan dengan Bill Gates)

Hidup itu sulit, dan seiring waktu, pengkodean UTF-16 mulai tidak memadai. Ternyata ada banyak bahasa Asia, dan mereka memiliki banyak mesin terbang. Dan semua mesin terbang ini tidak bisa dijejalkan menjadi 2 byte.

Apa yang bisa dilakukan? Gunakan lebih banyak byte !

Tetapi tipe char hanya 2 byte dan mengubahnya menjadi 4 tidaklah mudah: miliaran baris kode Java telah ditulis di seluruh dunia, yang akan rusak jika tipe char tiba-tiba menjadi 4 byte mesin Java. Jadi kita tidak bisa mengubah tipe karakter!

Ada pendekatan lain. Ingat bagaimana kita melarikan diri dari karakter dengan meletakkan garis miring terbalik di depannya. Pada dasarnya, kami menyandikan satu karakter menggunakan beberapa karakter.

Pencipta Java memutuskan untuk menggunakan pendekatan yang sama.

Beberapa karakter yang muncul secara visual sebagai satu karakter dikodekan sebagai dua chars dalam sebuah string:

Kode Keluaran konsol
System.out.println("\uD83D\uDD0A");
🔊

Sekarang program Java Anda bahkan dapat mengeluarkan emoji ke konsol 😎