«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);

Далее мы поговорим о блокировании блоков и как это дает нам больше контроля над начальными и конечными разрывами строк.

Мы можем изменить поведение по умолчанию, используя два метода пережевывания: сохранить и удалить.

3.1. Keep

Keep представлен знаком «+», как мы можем видеть в literal_keep.yaml:

key: |+
  Line1
  Line2
  Line3


...

Переопределяя поведение по умолчанию, мы видим, что каждая конечная пустая строка сохраняется:

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

~ ~~ 3.2. Strip

Полоса представлена ​​знаком «-», как мы можем видеть в literal_strip.yaml:

key: |-
  Line1
  Line2
  Line3

...

Как и следовало ожидать, это приводит к удалению всех конечных пустых строк:

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

~ ~~ 4. Свернутый стиль

Свернутый оператор представлен «\u003e», как мы можем видеть в 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. Одинарные кавычки

key: 'Line1\nLine2

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

С другой стороны, одинарные кавычки рассматривают «\\n» как часть строки, поэтому единственный способ вставить разрыв строки — использовать пустую строку:

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

В этом кратком руководстве мы рассмотрели несколько способов разбиения строк YAML на несколько строк с помощью быстрых и практических примеров.