Rompere le stringhe YAML su più linee

1. Panoramica

In questo articolo, impareremo come rompere le stringhe YAML su più righe.

Per analizzare e testare i nostri file YAML, utilizzeremo la libreria SnakeYAML.

2. Stringhe multilinea

Prima di iniziare, creiamo un metodo per leggere semplicemente una chiave YAML da un file in una stringa :

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

Nelle prossime sottosezioni esamineremo alcune strategie per dividere le stringhe su più righe.

Impareremo anche come YAML gestisce le interruzioni di riga iniziali e finali rappresentate da righe vuote all'inizio e alla fine di un blocco.

3. Stile letterale

L'operatore letterale è rappresentato dal simbolo pipe ("|"). Mantiene le nostre interruzioni di riga ma riduce le righe vuote alla fine della stringa fino a una singola interruzione di riga.

Diamo un'occhiata al file YAML literal.yaml :

key: | Line1 Line2 Line3

Possiamo vedere che le nostre interruzioni di riga vengono mantenute:

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

Successivamente, diamo un'occhiata a literal2.yaml , che ha alcune interruzioni di riga iniziali e finali:

key: | Line1 Line2 Line3 ...

Possiamo vedere che ogni interruzione di riga è presente tranne le interruzioni di riga finali, che sono ridotte a una:

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

Successivamente, parleremo del blocco dei blocchi e di come ci dà un maggiore controllo sulle interruzioni di riga iniziale e finale.

Possiamo cambiare il comportamento predefinito usando due metodi di chomping: keep e strip .

3.1. Mantenere

Keep è rappresentato da "+" come possiamo vedere in literal_keep.yaml :

key: |+ Line1 Line2 Line3 ...

Sovrascrivendo il comportamento predefinito, possiamo vedere che ogni riga vuota finale viene mantenuta :

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

3.2. Striscia

La striscia è rappresentata da "-" come possiamo vedere in literal_strip.yaml :

key: |- Line1 Line2 Line3 ...

Come ci saremmo potuti aspettare, questo si traduce nella rimozione di ogni riga vuota finale :

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

4. Stile piegato

L'operatore folded è rappresentato da ">" come possiamo vedere in folded.yaml :

key: > Line1 Line2 Line3

Per impostazione predefinita, le interruzioni di riga vengono sostituite da caratteri spazio per righe consecutive non vuote:

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

Diamo un'occhiata a un file simile, folded2.yaml , che ha alcune righe vuote finali:

key: > Line1 Line2 Line3 ...

Possiamo vedere che le righe vuote vengono mantenute, ma anche le interruzioni di riga finali sono ridotte a una :

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

Dobbiamo tenere a mente che il block chomping influisce sullo stile pieghevole nello stesso modo in cui influisce sullo stile letterale .

5. Citando

Diamo una rapida occhiata alla divisione delle stringhe con l'aiuto di virgolette doppie e singole.

5.1. Virgolette

Con le virgolette doppie, possiamo facilmente creare stringhe multilinea utilizzando " \ n ":

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

5.2. Citazioni singole

D'altra parte, le virgolette singole trattano " \ n " come parte della stringa, quindi l'unico modo per inserire un'interruzione di riga è usare una riga vuota:

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

6. Conclusione

In questo rapido tutorial, abbiamo esaminato diversi modi per rompere le stringhe YAML su più righe attraverso esempi rapidi e pratici.

Come sempre, il codice è disponibile su GitHub.