Прекъсване на YAML струни през множество линии

1. Общ преглед

В тази статия ще научим за разбиването на YAML низове през множество редове.

За да анализираме и тестваме нашите YAML файлове, ще използваме библиотеката SnakeYAML.

2. Многоредови струни

Преди да започнем, нека създадем метод за просто четене на YAML ключ от файл в низ :

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

В следващите подраздели ще разгледаме няколко стратегии за разделяне на низове върху множество редове.

Също така ще научим как YAML обработва водещи и крайни прекъсвания на редове, представени от празни редове в началото и края на блок.

3. Буквален стил

Буквалният оператор е представен със символа на тръбата ("|"). Той запазва нашите прекъсвания на редове, но намалява празните редове в края на низа до едно прекъсване на редове.

Нека да разгледаме YAML файла literal.yaml :

key: | Line1 Line2 Line3

Виждаме, че нашите прекъсвания на редове са запазени:

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

След това нека да разгледаме literal2.yaml , който има някои водещи и крайни прекъсвания на редове:

key: | Line1 Line2 Line3 ...

Виждаме, че е налице всяко прекъсване на редове, с изключение на крайните прекъсвания на редове, които се свеждат до едно:

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

След това ще говорим за блокиране на блокове и как това ни дава по-голям контрол върху началните и крайните прекъсвания на редовете.

Можем да променим поведението по подразбиране, като използваме два метода за измама: keep и strip .

3.1. Пазя

Keep се представя с „+“, както виждаме в literal_keep.yaml :

key: |+ Line1 Line2 Line3 ...

Като заменим поведението по подразбиране, можем да видим, че всеки завършващ празен ред се запазва :

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

3.2. Лента

Лентата е представена от „-“, както можем да видим в literal_strip.yaml :

key: |- Line1 Line2 Line3 ...

Както може би сме очаквали, това води до премахване на всеки завършващ празен ред :

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

4. Сгънат стил

Сгънатият оператор е представен от „>”, както можем да видим в folded.yaml :

key: > Line1 Line2 Line3

По подразбиране прекъсванията на редовете се заменят с интервали за последователни непразни редове:

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

Нека да разгледаме подобен файл, folded2.yaml , който има няколко завършващи празни реда:

key: > Line1 Line2 Line3 ...

Виждаме, че празните редове са запазени, но крайните прекъсвания на редове също се свеждат до едно :

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

Трябва да имаме предвид, че блокирането на блокове влияе върху стила на сгъване по същия начин, както върху буквалния стил .

5. Цитиране

Нека да разгледаме бързо разделянето на низовете с помощта на двойни и единични кавички.

5.1. Двойни кавички

С двойни кавички можем лесно да създадем многоредови низове, като използваме „ \ n “:

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

5.2. Единични оферти

От друга страна, единичното цитиране третира „ \ n “ като част от низа, така че единственият начин за вмъкване на прекъсване на ред е използването на празен ред:

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

6. Заключение

В този бърз урок разгледахме множество начини за разбиване на низове на YAML през множество редове чрез бързи и практически примери.

Както винаги, кодът е достъпен в GitHub.