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 .