At bryde YAML-strenge over flere linjer

1. Oversigt

I denne artikel lærer vi om at bryde YAML-strenge over flere linjer.

For at analysere og teste vores YAML-filer bruger vi SnakeYAML-biblioteket.

2. Multi-line strenge

Før vi begynder, lad os oprette en metode til simpelthen at læse en YAML-nøgle fra en fil til en Snor:

String parseYamlKey (String fileName, String key) {InputStream inputStream = this.getClass () .getClassLoader () .getResourceAsStream (fileName); Kort parset = yaml.load (inputStream); return parsed.get (nøgle); }

I de næste underafsnit ser vi på et par strategier til opdeling af strenge over flere linjer.

Vi lærer også, hvordan YAML håndterer ledende og slutter linjeskift repræsenteret af tomme linjer i begyndelsen og slutningen af ​​en blok.

3. Bogstavelig stil

Den bogstavelige operatør er repræsenteret af rørsymbolet (“|”). Det holder vores linjeskift, men reducerer tomme linjer i slutningen af ​​strengen ned til en enkelt linjeskift.

Lad os se på YAML-filen bogstavelig.yaml:

nøgle: | Line1 Line2 Line3

Vi kan se, at vores linjeskift bevares:

Strengnøgle = parseYamlKey ("bogstavelig.yaml", "nøgle"); assertEquals ("Line1 \ nLine2 \ nLine3", nøgle);

Lad os derefter se på literal2.yaml, som har nogle førende og slutter linjeskift

nøgle: | Line1 Line2 Line3 ...

Vi kan se, at hver linjeskift er til stede bortset fra at slutte linjeskift, som reduceres til en:

Strengnøgle = parseYamlKey ("literal2.yaml", "nøgle"); assertEquals ("\ n \ nLine1 \ n \ nLine2 \ n \ nLine3 \ n", nøgle);

Dernæst vil vi tale om blokchomping og hvordan det giver os mere kontrol over start og slutning af linjeskift.

Vi kan ændre standardadfærden ved hjælp af to chomping-metoder: hold og strip.

3.1. Holde

Keep er repræsenteret af "+" som vi kan se i literal_keep.yaml:

nøgle: | + Line1 Line2 Line3 ...

Ved at tilsidesætte standardadfærden kan vi se det hver afslutning tomme linje holdes:

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

3.2. Strip

Striben er repræsenteret af "-" som vi kan se i literal_strip.yaml:

nøgle: | - Line1 Line2 Line3 ...

Som vi måske havde forventet, resulterer dette i fjerne hver afslutning tomme linje:

Strengnøgle = parseYamlKey ("literal_strip.yaml", "key"); assertEquals ("Line1 \ nLine2 \ nLine3", nøgle);

4. Foldet stil

Den foldede operator er repræsenteret af “>” som vi kan se i foldet.yaml:

tast:> Line1 Line2 Line3

Som standard erstattes linjeskift med mellemrumstegn for på hinanden følgende ikke-tomme linjer:

Strengnøgle = parseYamlKey ("foldet.yaml", "nøgle"); assertEquals ("Line1 Line2 Line3", nøgle);

Lad os se på en lignende fil, foldet2.yaml, som har et par slutter tomme linjer:

tast:> Line1 Line2 Line3 ...

Det kan vi se tomme linjer bevares, men afslutning af linjeskift reduceres også til en:

Strengnøgle = parseYamlKey ("foldet2.yaml", "nøgle"); assertEquals ("Line1 Line2 \ n \ nLine3 \ n", nøgle);

Det skal vi huske på blok chomping påvirker foldestilen på samme måde som den påvirker den bogstavelige stil.

5. Citat

Lad os se hurtigt på at dele strenge ved hjælp af dobbelt- og enkeltcitater.

5.1. Dobbelt citater

Med dobbelt anførselstegn kan vi nemt oprette streng med flere linjer ved hjælp af “\ n“:

nøgle: "Line1 \ nLine2 \ nLine3"
Strengnøgle = parseYamlKey ("almindelig_dobbelt_quotes.yaml", "nøgle"); assertEquals ("Line1 \ nLine2 \ nLine3", nøgle);

5.2. Enkelt tilbud

På den anden side behandler single-quote citater “\ n”Som en del af strengen, så den eneste måde at indsætte et linjeskift på er ved at bruge en tom linje:

nøgle: 'Line1 \ nLine2 Line3'
Strengnøgle = parseYamlKey ("almindelig_single_quotes.yaml", "nøgle"); assertEquals ("Line1 \ nLine2 \ nLine3", nøgle);

6. Konklusion

I denne hurtige vejledning har vi set på flere måder at bryde YAML-strenge over flere linjer gennem hurtige og praktiske eksempler.

Som altid er koden tilgængelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found