Memecahkan Rentetan YAML Lebih Berbilang Garis

1. Gambaran keseluruhan

Dalam artikel ini, kita akan belajar memecahkan rentetan YAML pada beberapa baris.

Untuk mengurai dan menguji fail YAML kami, kami akan memanfaatkan perpustakaan SnakeYAML.

2. Rentetan Berbilang Garis

Sebelum kita mulakan, mari buat kaedah untuk membaca kunci YAML dari fail ke dalam String :

String parseYamlKey(String fileName, String key) { InputStream inputStream = this.getClass() .getClassLoader() .getResourceAsStream(fileName); Map parsed = yaml.load(inputStream); return parsed.get(key); }

Pada bahagian seterusnya, kita akan melihat beberapa strategi untuk membelah rentetan pada beberapa baris.

Kami juga akan mengetahui bagaimana YAML menangani penutupan garisan utama dan akhir yang ditunjukkan oleh garis kosong pada awal dan akhir blok.

3. Gaya Literal

Pengendali harfiah diwakili oleh simbol paip (“|”). Ini mengekalkan pemecahan baris kami tetapi mengurangkan garis kosong di hujung rentetan hingga pemecahan satu baris.

Mari lihat fail YAML literal.yaml :

key: | Line1 Line2 Line3

Kami dapat melihat bahawa jeda talian kami dikekalkan:

String key = parseYamlKey("literal.yaml", "key"); assertEquals("Line1\nLine2\nLine3", key);

Seterusnya, mari kita lihat literal2.yaml , yang mempunyai beberapa jeda baris yang terkemuka dan berakhir:

key: | Line1 Line2 Line3 ...

Kita dapat melihat bahawa setiap jeda baris ada kecuali untuk mengakhiri jeda baris, yang dikurangkan menjadi satu:

String key = parseYamlKey("literal2.yaml", "key"); assertEquals("\n\nLine1\n\nLine2\n\nLine3\n", key);

Seterusnya, kita akan membincangkan tentang blok chomping dan bagaimana ia memberi kita lebih banyak kawalan untuk memulakan dan menamatkan jeda baris.

Kita boleh mengubah tingkah laku lalai dengan menggunakan dua kaedah chomping: keep and strip .

3.1. Jaga

Keep diwakili oleh "+" seperti yang kita lihat dalam literal_keep.yaml :

key: |+ Line1 Line2 Line3 ...

Dengan mengatasi tingkah laku lalai, kita dapat melihat bahawa setiap baris kosong berakhir :

String key = parseYamlKey("literal_keep.yaml", "key"); assertEquals("Line1\nLine2\nLine3\n\n", key);

3.2. Jalur

Jalur diwakili oleh "-" seperti yang kita lihat dalam literal_strip.yaml :

key: |- Line1 Line2 Line3 ...

Seperti yang kami jangkakan, ini menghasilkan semua baris kosong yang berakhir :

String key = parseYamlKey("literal_strip.yaml", "key"); assertEquals("Line1\nLine2\nLine3", key);

4. Gaya Dilipat

Operator dilipat diwakili oleh ">" seperti yang kita lihat di folded.yaml :

key: > Line1 Line2 Line3

Secara lalai, jeda baris digantikan oleh aksara ruang untuk baris tidak kosong berturut-turut:

String key = parseYamlKey("folded.yaml", "key"); assertEquals("Line1 Line2 Line3", key);

Mari lihat fail yang serupa, folded2.yaml , yang mempunyai beberapa baris kosong yang berakhir:

key: > Line1 Line2 Line3 ...

Kita dapat melihat bahawa garisan kosong dipelihara, tetapi penutupan garisan akhir juga dikurangkan menjadi satu :

String key = parseYamlKey("folded2.yaml", "key"); assertEquals("Line1 Line2\n\nLine3\n", key);

Kita harus ingat bahawa blok chomping mempengaruhi gaya lipatan dengan cara yang sama mempengaruhi gaya literal .

5. Memetik

Mari kita lihat sekilas rentetan dengan bantuan petikan berganda dan tunggal.

5.1. Petikan Berganda

Dengan tanda petik dua kali, kita dapat membuat rentetan berbilang baris dengan mudah menggunakan " \ n ":

key: "Line1\nLine2\nLine3"
String key = parseYamlKey("plain_double_quotes.yaml", "key"); assertEquals("Line1\nLine2\nLine3", key);

5.2. Petikan Tunggal

Sebaliknya, tanda kutip tunggal memperlakukan " \ n " sebagai sebahagian daripada rentetan, jadi satu-satunya cara untuk memasukkan garis putus adalah dengan menggunakan garis kosong:

key: 'Line1\nLine2 Line3'
String key = parseYamlKey("plain_single_quotes.yaml", "key"); assertEquals("Line1\\nLine2\nLine3", key);

6. Kesimpulannya

Dalam tutorial ringkas ini, kami telah melihat pelbagai cara untuk memecahkan rentetan YAML pada beberapa baris melalui contoh cepat dan praktikal.

Seperti biasa, kodnya tersedia di GitHub.