«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 на несколько строк с помощью быстрых и практических примеров.