Blok Teks Java

1. Pengenalan

Dalam tutorial sebelumnya, kami melihat bagaimana kami dapat menggunakan rentetan multi-baris dalam versi Java mana pun dan tanpa mengaktifkan fitur pratonton.

Dalam tutorial ini, kita akan melihat cara menggunakan ciri pratonton JDK 13/14 blok teks .

2. Penggunaan

Sejak Java 13, blok teks tersedia sebagai ciri pratonton. Blok teks bermula dengan “” ” (tiga tanda petik ganda) diikuti dengan ruang kosong pilihan dan garis baru. Contoh yang paling mudah seperti:

String example = """ Example text""";

Perhatikan bahawa jenis hasil blok teks masih rentetan . Blok teks hanya memberi kita cara lain untuk menulis literasi String dalam kod sumber kami.

Di dalam blok teks, kita dapat dengan bebas menggunakan baris baru dan tanda kutip tanpa perlu melarikan diri . Ini membolehkan kita memasukkan serpihan literal HTML, JSON, SQL, atau apa sahaja yang kita perlukan, dengan cara yang lebih elegan dan mudah dibaca.

Dalam String yang dihasilkan , lekukan (dasar) dan garis baru pertama tidak disertakan. Kami akan melihat penyerahan lekukan di bahagian seterusnya.

3. lekukan

Nasib baik, ketika menggunakan blok teks, kita masih dapat memasukkan kod kita dengan betul. Untuk mencapainya, sebahagian lekukan dianggap sebagai kod sumber sementara bahagian lekukan lain dilihat sebagai bagian dari blok teks. Untuk membuat ini berfungsi, penyusun memeriksa lekukan minimum di semua baris yang tidak kosong. Seterusnya, penyusun mengalihkan blok teks lengkap ke kiri.

Pertimbangkan blok teks yang mengandungi beberapa HTML:

public String getBlockOfHtml() { return """   example text  """; }

Dalam kes ini, lekukan minimum ialah 12 ruang. Oleh itu, semua 12 ruang di sebelah kiridan pada semua baris berikutnya dikeluarkan. Mari uji ini:

@Test void givenAnOldStyleMultilineString_whenComparing_thenEqualsTextBlock() { String expected = "\n" + "\n" + " \n" + " example text\n" + " \n" + ""; assertThat(subject.getBlockOfHtml()).isEqualTo(expected); } @Test void givenAnOldStyleString_whenComparing_thenEqualsTextBlock() { String expected = "\n\n \n example text\n \n"; assertThat(subject.getBlockOfHtml()) .isEqualTo(expected); }

Apabila kita memerlukan lekukan yang jelas , kita dapat menggunakan lekukan yang kurang untuk garis yang tidak kosong (atau baris terakhir):

public String getNonStandardIndent() { return """ Indent """; } @Test void givenAnIndentedString_thenMatchesIndentedOldStyle() { assertThat(subject.getNonStandardIndent()) .isEqualTo(" Indent\n"); }

Selain itu, kita juga dapat menggunakan melarikan diri di dalam blok teks, seperti yang akan kita lihat di bahagian seterusnya.

4. Melarikan diri

Di dalam blok teks, petikan ganda dan baris baru tidak perlu dilarikan. Namun, kita dapat menggunakan escaping untuk menambahkan, misalnya, carriage return ( \ r ) atau tab ( \ t ) ke blok teks. Kita bahkan boleh menggunakan "" "lagi di blok teks kita dengan melepaskan salah satu tanda petik:

public String getTextWithEscapes() { return """ fun with\n whitespace\t\r and other escapes \""" """; }

Ketahuilah bahawa kerana tanda kutip tunggal dan baris baru tidak harus dilarikan, dianggap sebagai amalan buruk untuk melarikan diri.

Juga, perhatikan bahawa walaupun fail sumber mempunyai hujung baris Windows ( \ r \ n ), blok teks hanya akan dihentikan dengan baris baru ( \ n ) . Sekiranya kita memerlukan pengembalian kereta ( \ r ) untuk hadir, kita harus menambahkannya secara eksplisit ke blok teks:

public String getTextWithCarriageReturns() { return """ separated with\r carriage returns"""; } @Test void givenATextWithCarriageReturns_thenItContainsBoth() { assertThat(subject.getTextWithCarriageReturns()) .isEqualTo("separated with\r\ncarriage returns"); }

5. Memformat

Untuk membantu penggantian berubah-ubah, kaedah baru ditambahkan yang memungkinkan memanggil kaedah String.format secara langsung pada String literal:

public String getFormattedText(String parameter) { return """ Some parameter: %s """.formatted(parameter); }

Semua ciri ini sudah menyediakan ciri yang sangat hebat. Namun, Java 14 telah memasukkan beberapa ciri tambahan. Kita akan melihat lebih banyak lagi mengenai perkara itu seterusnya.

6. Urutan Escape Baru di Java 14

Pratonton kedua ciri Blok Teks menambah dua urutan pelarian tambahan.

6.1. Penghilang Talian Melarikan diri

Kadang kala, kita mungkin mempunyai baris teks panjang dalam kod sumber yang ingin kita format dengan cara yang mudah dibaca. Pratonton kedua menambahkan ciri yang membolehkan kita melakukan ini. Kita boleh melarikan diri dari garis baru sehingga tidak diendahkan :

public String getIgnoredNewLines() { return """ This is a long test which looks to \ have a newline but actually does not"""; }

Sebenarnya ini String literal hanya akan sama dengan yang tidak terganggu normal String :

@Test void givenAStringWithEscapedNewLines_thenTheResultHasNoNewLines() { String expected = "This is a long test which looks to have a newline but actually does not"; assertThat(subject.getIgnoredNewLines()) .isEqualTo(expected); }

6.2. Melarikan Ruang

Penyusun mengabaikan semua ruang belakang dalam blok teks . Walau bagaimanapun, sejak pratonton kedua, kita boleh melarikan diri ruang menggunakan urutan melarikan diri baru \ s . Penyusun juga akan mengekalkan sebarang ruang di hadapan ruang yang melarikan diri ini.

Mari kita lihat lebih dekat kesan ruang yang melarikan diri:

public String getEscapedSpaces() { return """ line 1······· line 2·······\s """; } @Test void givenAStringWithEscapesSpaces_thenTheResultHasLinesEndingWithSpaces() { String expected = "line 1\nline 2 \n"; assertThat(subject.getEscapedSpaces()) .isEqualTo(expected); } 

Catatan : ruang dalam contoh di atas diganti dengan simbol '·' untuk menjadikannya kelihatan.

Penyusun akan membuang ruang dari baris pertama. Walau bagaimanapun, baris kedua ditamatkan dengan ruang yang melarikan diri dan semua ruang dipelihara.

7. Kesimpulannya

Dalam tutorial ringkas ini, kami melihat ciri Java Text Blok. Ia mungkin bukan pengubah permainan, tetapi ia membantu kita menulis kod yang lebih baik dan lebih mudah dibaca, yang biasanya merupakan perkara yang baik.

Seperti biasa, kod sumber penuh artikel terdapat di GitHub.