Bryte YAML-strenger over flere linjer

1. Oversikt

I denne artikkelen vil vi lære om å bryte YAML-strenger over flere linjer.

For å analysere og teste YAML-filene våre, bruker vi SnakeYAML-biblioteket.

2. Strenger med flere linjer

Før vi begynner, la oss lage en metode for å bare lese en YAML-nøkkel fra en fil til en String:

Streng parseYamlKey (strengfilnavn, strengnøkkel) {InputStream inputStream = this.getClass () .getClassLoader () .getResourceAsStream (fileName); Kart analysert = yaml.load (inputStream); return parsed.get (nøkkel); }

I de neste underavsnittene ser vi på noen få strategier for å dele strenger over flere linjer.

Vi lærer også hvordan YAML håndterer ledende og slutt linjeskift representert av tomme linjer i begynnelsen og slutten av en blokk.

3. Bokstavelig stil

Den bokstavelige operatøren er representert med rørsymbolet (“|”). Det holder linjeskiftene våre, men reduserer tomme linjer på slutten av strengen ned til en enkelt linjeskift.

La oss ta en titt på YAML-filen bokstavelig.yaml:

nøkkel: | Linje1 Linje2 Linje3

Vi kan se at linjeskiftene våre er bevart:

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

La oss ta en titt på bokstavelig2.yaml, som har noen ledende og endelige linjeskift:

nøkkel: | Linje1 Linje2 Linje3 ...

Vi kan se at hvert linjeskift er tilstede bortsett fra sluttlinjeskift, som er redusert til ett:

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

Deretter vil vi snakke om block chomping og hvordan det gir oss mer kontroll over start og slutt på linjeskift.

Vi kan endre standardadferd ved å bruke to chomping-metoder: beholder og striper.

3.1. Beholde

Keep er representert med “+” som vi kan se i literal_keep.yaml:

nøkkel: | + Linje1 Linje2 Linje3 ...

Ved å overstyre standardadferd kan vi se det hver slutt tomme linje holdes:

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

3.2. Strip

Stripen er representert med "-" som vi kan se i literal_strip.yaml:

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

Som vi kanskje hadde forventet, resulterer dette i fjerne hver slutt tomme linje:

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

4. Brettet stil

Den brettede operatøren er representert med “>” som vi kan se i brettet.yaml:

tast:> Linje1 Linje2 Linje3

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

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

La oss se på en lignende fil, brettet2.yaml, som har noen få tomme tomme linjer:

tast:> Linje1 Linje2 Linje3 ...

Vi kan se det tomme linjer bevares, men sluttlinjeskift reduseres også til en:

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

Vi bør huske på det block chomping påvirker foldestilen på samme måte som den påvirker den bokstavelige stilen.

5. Sitat

La oss ta en rask titt på splitting av strenger ved hjelp av doble og enkle anførselstegn.

5.1. Doble sitater

Med doble anførselstegn kan vi enkelt opprette streng med flere linjer ved å bruke “\ n“:

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

5.2. Enkelt sitater

På den annen side behandler single-sitering “\ n”Som en del av strengen, så den eneste måten å sette inn et linjeskift er å bruke en tom linje:

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

6. Konklusjon

I denne raske opplæringen har vi sett på flere måter å bryte YAML-strenger over flere linjer gjennom raske og praktiske eksempler.

Som alltid er koden tilgjengelig på GitHub.