Rupture de chaînes YAML sur plusieurs lignes

1. Vue d'ensemble

Dans cet article, nous allons découvrir comment casser des chaînes YAML sur plusieurs lignes.

Afin d'analyser et de tester nos fichiers YAML, nous utiliserons la bibliothèque SnakeYAML.

2. Chaînes multilignes

Avant de commencer, créons une méthode pour lire simplement une clé YAML d'un fichier dans une chaîne :

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

Dans les sous-sections suivantes, nous examinerons quelques stratégies pour fractionner des chaînes sur plusieurs lignes.

Nous allons également apprendre comment YAML gère les sauts de ligne de début et de fin représentés par des lignes vides au début et à la fin d'un bloc.

3. Style littéral

L'opérateur littéral est représenté par le symbole pipe («|»). Il conserve nos sauts de ligne mais réduit les lignes vides à la fin de la chaîne à un seul saut de ligne.

Jetons un coup d'œil au fichier YAML literal.yaml :

key: | Line1 Line2 Line3

Nous pouvons voir que nos sauts de ligne sont conservés:

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

Ensuite, jetons un œil à literal2.yaml , qui a des sauts de ligne de début et de fin:

key: | Line1 Line2 Line3 ...

Nous pouvons voir que chaque saut de ligne est présent à l'exception des sauts de ligne de fin, qui sont réduits à un:

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

Ensuite, nous parlerons de la gravure de blocs et de la façon dont elle nous donne plus de contrôle sur les sauts de ligne de début et de fin.

Nous pouvons changer le comportement par défaut en utilisant deux méthodes de chomping: keep et strip .

3.1. Garder

Keep est représenté par «+» comme nous pouvons le voir dans literal_keep.yaml :

key: |+ Line1 Line2 Line3 ...

En remplaçant le comportement par défaut, nous pouvons voir que chaque ligne vide de fin est conservée :

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

3.2. Bande

La bande est représentée par «-» comme on peut le voir dans literal_strip.yaml :

key: |- Line1 Line2 Line3 ...

Comme on pouvait s'y attendre, cela entraîne la suppression de chaque ligne vide de fin :

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

4. Style plié

L'opérateur plié est représenté par «>» comme on peut le voir dans folded.yaml :

key: > Line1 Line2 Line3

Par défaut, les sauts de ligne sont remplacés par des espaces pour les lignes consécutives non vides:

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

Regardons un fichier similaire, folded2.yaml , qui a quelques lignes vides de fin:

key: > Line1 Line2 Line3 ...

Nous pouvons voir que les lignes vides sont conservées, mais les sauts de ligne de fin sont également réduits à un :

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

Nous devons garder à l'esprit que le blocage des blocs affecte le style de pliage de la même manière qu'il affecte le style littéral .

5. Citations

Jetons un coup d'œil à la division des chaînes à l'aide de guillemets doubles et simples.

5.1. Double citation

Avec des guillemets doubles, nous pouvons facilement créer des chaînes multilignes en utilisant « \ n »:

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

5.2. Guillemets simples

D'un autre côté, les guillemets simples traitent « \ n » comme faisant partie de la chaîne, donc la seule façon d'insérer un saut de ligne est d'utiliser une ligne vide:

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

6. Conclusion

Dans ce tutoriel rapide, nous avons examiné plusieurs façons de casser des chaînes YAML sur plusieurs lignes à travers des exemples rapides et pratiques.

Comme toujours, le code est disponible sur sur GitHub.