Перейти к основному содержимому

Разрыв строк YAML на несколько строк

· 3 мин. чтения

1. Обзор

В этой статье мы узнаем о разбиении строк YAML на несколько строк.

Чтобы разобрать и протестировать наши файлы YAML, мы воспользуемся библиотекой SnakeYAML .

2. Многострочные строки

Прежде чем мы начнем, давайте создадим метод для простого чтения ключа YAML из файла в строку :

String parseYamlKey(String fileName, String key) {
InputStream inputStream = this.getClass()
.getClassLoader()
.getResourceAsStream(fileName);
Map<String, String> 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 .