Menyisipkan satu cuplikan JSON atau SQL ke dalam kode Java klasik adalah latihan kesabaran: setiap baris harus diakhiri \n, setiap tanda kutip ganda di-escape jadi \", dan seluruh potongan dirantai dengan operator +. Hasilnya valid, tetapi tidak ada yang mirip teks aslinya — pembaca harus menyusun ulang string itu di kepala untuk membayangkan bentuk akhirnya. Text block, difinalkan di Java 15 melalui JEP 378 (preview sejak JEP 355), menyediakan literal string multi-baris yang ditulis apa adanya di antara pembuka """ dan penutup """. Chapter ini membahas aturan lekukan yang menentukan hasil akhir, escape yang tetap berlaku, dan pola template dengan formatted().
Aturan Lekukan Minimal #
Text block menghapus incidental whitespace secara otomatis: compiler menghitung lekukan minimum yang dimiliki bersama oleh seluruh baris (termasuk baris penutup """), lalu membuang lekukan sebesar itu dari tiap baris. Konsekuensinya penting: posisi penutup """ ikut menentukan hasil. Bila penutup digeser ke kanan, batas pembuang bertambah dan isi bergeser ke kiri; bila penutup diletakkan di kolom paling kiri dari seluruh isi, seluruh lekukan bermakna tetap utuh. Baris kosong dan baris berisi spasi saja tidak ikut menghitung lekukan minimum tersebut.
Menulis JSON, Surat, dan Baris Panjang #
Program teruji berikut menyusun empat kasus umum sekaligus: cuplikan JSON, surat ber-template, baris panjang yang disambung, dan spasi ujung baris yang dijaga:
public class TeksBersih {
public static void main(String[] args) {
// 1) JSON multi-baris tanpa konkatenasi dan tanpa \n manual.
var profil = """
{
"nama": "Budi Santoso",
"email": "[email protected]",
"peran": ["admin", "editor"],
"aktif": true
}
""";
System.out.println(profil);
// 2) Template dengan formatted(): dua placeholder diisi runtime.
var surat = """
Halo %s,
pesanan %d sudah kami kirim.
Terima kasih.""".formatted("Siti", 1729);
System.out.println(surat);
System.out.println("panjang surat: " + surat.length() + " karakter");
// 3) Baris disambung dengan backslash: satu baris logis.
var alamat = """
Jalan Merdeka No. \
45, Jakarta Pusat""";
System.out.println(alamat);
// 4) Escape \s menjaga spasi di ujung baris tetap ada.
var tabel = """
nama \s kolom\s
---- \s ----\s""";
System.out.println("[" + tabel + "]");
}
}Output yang Dihasilkan:
{
"nama": "Budi Santoso",
"email": "[email protected]",
"peran": ["admin", "editor"],
"aktif": true
}
Halo Siti,
pesanan 1729 sudah kami kirim.
Terima kasih.
panjang surat: 55 karakter
Jalan Merdeka No. 45, Jakarta Pusat
[nama kolom
---- ---- ]Bedah baris-per-baris untuk bagian pentingnya:
- Blok
var profil = """...""": isi JSON ditulis apa adanya; lekukan dua spasi di dalam blok terjaga karena penutup"""berada di kolom yang sama dengan katavar, yaitu lebih kiri daripada seluruh isi. - Blok
var surat = """...""".formatted("Siti", 1729): text block adalahStringbiasa, sehingga methodformatted()dariStringdapat langsung mengisi placeholder%sdan%dsaat runtime. - Baris
Jalan Merdeka No. \: backslash di ujung baris menyambung baris berikutnya tanpa menyisakan spasi atau\n— hasilnya satu baris logisJalan Merdeka No. 45, Jakarta Pusat. - Escape
\sdi blok terakhir: satu spasi tunggal di ujung baris akan dibuang sebagai lekukan insidental;\smewakili spasi yang dipertahankan, terlihat dari spasi sebelum]pada output.
Escape yang Tetap Berlaku #
Text block bukan raw string: urutan escape tetap diproses seperti string biasa. Tanda kutip ganda di dalam isi tidak perlu di-escape — itulah guna utamanya — tetapi escape lain tetap bekerja:
| Escape | Fungsi dalam text block |
|---|---|
\" | Tanda kutip ganda (jarang diperlukan lagi) |
\n, \t | Kontrol karakter seperti biasa |
\s | Spasi yang dipertahankan di ujung baris |
\ di akhir baris | Menyambung baris berikutnya tanpa pemisah |
\\ | Backslash literal |
Dengan string multi-baris beres, data bertipe sederhana pun berikutnya mendapat bentuk khusus: record memungkinkan satu baris kode menjadi class data lengkap.
Referensi #
Berkas Sumber
Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.
TeksBersih.java
Unduh berkaspublic class TeksBersih {
public static void main(String[] args) {
// 1) JSON multi-baris tanpa konkatenasi dan tanpa \n manual.
var profil = """
{
"nama": "Budi Santoso",
"email": "[email protected]",
"peran": ["admin", "editor"],
"aktif": true
}
""";
System.out.println(profil);
// 2) Template dengan formatted(): dua placeholder diisi runtime.
var surat = """
Halo %s,
pesanan %d sudah kami kirim.
Terima kasih.""".formatted("Siti", 1729);
System.out.println(surat);
System.out.println("panjang surat: " + surat.length() + " karakter");
// 3) Baris disambung dengan backslash: satu baris logis.
var alamat = """
Jalan Merdeka No. \
45, Jakarta Pusat""";
System.out.println(alamat);
// 4) Escape \s menjaga spasi di ujung baris tetap ada.
var tabel = """
nama \s kolom\s
---- \s ----\s""";
System.out.println("[" + tabel + "]");
}
}