Java tekstblokker

1. Introduksjon

I en tidligere opplæring så vi hvordan vi kan bruke streng med flere linjer i hvilken som helst Java-versjon og uten å aktivere forhåndsvisningsfunksjoner.

I denne opplæringen får vi se hvordan du bruker forhåndsvisningsfunksjonen JDK 13/14 i tekstblokker.

2. Bruk

Siden Java 13 er tekstblokker tilgjengelig som forhåndsvisning. Tekstblokker starter med a “”” (tre doble anførselstegn) etterfulgt av valgfritt mellomrom og en ny linje. Det mest enkle eksemplet kan se ut:

Strengeksempel = "" "Eksempeltekst" "";

Merk at resultattypen til en tekstblokk fremdeles er en String. Tekstblokker gir oss bare en annen måte å skrive på String bokstaver i kildekoden vår.

Inne i tekstblokkene kan vi fritt bruke nye linjer og sitater uten å måtte unnslippe. Det lar oss inkludere bokstavelige fragmenter av HTML, JSON, SQL eller hva vi trenger på en mer elegant og lesbar måte.

I det resulterende Streng, (basis) fordypningen og den første nye linjen er ikke inkludert. Vi tar en titt på innleveringen av innrykk i neste avsnitt.

3. Innrykk

Heldigvis, når vi bruker tekstblokker, kan vi fortsatt kutte koden vår riktig. For å oppnå det blir en del av fordypningen behandlet som kildekoden, mens en annen del av innrykket blir sett på som en del av tekstblokken. For å få dette til å fungere, sjekker kompilatoren for minimum innrykk i alle ikke-tomme linjer. Deretter forskyver kompilatoren hele tekstblokken til venstre.

Vurder en tekstblokk som inneholder litt HTML:

offentlig streng getBlockOfHtml () {return "" "eksempeltekst" ""; }

I dette tilfellet er minimum innrykk 12 mellomrom. Dermed alle 12 mellomrom til venstre for og på alle påfølgende linjer fjernes. La oss teste dette:

@Test ugyldig gittAnOldStyleMultilineString_whenComparing_thenEqualsTextBlock () {Streng forventet = "\ n" + "\ n" + "\ n" + "eksempeltekst \ n" + "\ n" + ""; assertThat (subject.getBlockOfHtml ()). er EqualTo (forventet); } @Test ugyldig givenAnOldStyleString_whenComparing_thenEqualsTextBlock () {String forventet = "\ n \ n \ n eksempeltekst \ n \ n"; assertThat (subject.getBlockOfHtml ()) .isEqualTo (forventet); }

Når vi trenger eksplisitt innrykk, kan vi bruke mindre innrykk for en ikke-tom linje (eller den siste linjen):

public String getNonStandardIndent () {return "" "Indent" ""; } @Test ugyldig givenAnIndentedString_thenMatchesIndentedOldStyle () {assertThat (subject.getNonStandardIndent ()) .isEqualTo ("Indent \ n"); }

Videre kan vi også bruke rømning i tekstblokker, som vi vil se i neste avsnitt.

4. Rømmer

Inne i tekstblokker trenger ikke dobbelt anførselstegn og nye linjer å slippe unna. Vi kan imidlertid bruke escaping for å legge til for eksempel vognretur (\ r) eller faner (\ t) til en tekstblokk. Vi kan til og med bruke "" "igjen i tekstblokken vår ved å unnslippe et av dobbelt anførselstegn:

public String getTextWithEscapes () {return "" "moro med \ n hvitt mellomrom \ t \ r og andre rømninger \" "" "" ";}

Vær oppmerksom på at fordi enkelt-dobbelt anførselstegn og nye linjer ikke må slippes unna, anses det som dårlig praksis å unnslippe dem.

Vær også oppmerksom på at selv om en kildefil har Windows-linjeendelser (\ r \ n), vil tekstblokkene bare avsluttes med nye linjer (\ n). Hvis vi trenger vognretur (\ r) for å være til stede, må vi eksplisitt legge dem til i tekstblokken:

public String getTextWithCarriageReturns () {return "" "atskilt med vognretur" ""; } @Test ugyldig givenATextWithCarriageReturns_thenItContainsBoth () {assertThat (subject.getTextWithCarriageReturns ()) .isEqualTo ("separert med \ r \ ncarriage returnerer"); }

5. Formatering

For å hjelpe med variabel erstatning ble det lagt til en ny metode som gjør det mulig å ringe String.format metode direkte på en streng bokstavelig:

public String getFormattedText (String parameter) {return "" "En eller annen parameter:% s" "" .formatted (parameter); }

Alle disse funksjonene gir allerede en veldig kraftig funksjon. Java 14 har imidlertid inkludert noen ekstra funksjoner. Vi får se mer om det neste.

6. Nye rømningssekvenser i Java 14

Den andre forhåndsvisningen av Tekstblokker-funksjonen legger til to ekstra rømningssekvenser.

6.1. Rømningslinjeterminatorer

Noen ganger kan det hende vi har lange tekstlinjer i kildekoden som vi vil formatere på en lesbar måte. Den andre forhåndsvisningen la til en funksjon som lar oss gjøre dette. Vi kan unnslippe en ny linje slik at den blir ignorert:

public String getIgnoredNewLines () {return "" "Dette er en lang test som ser ut til \ å ha en ny linje, men som faktisk ikke" ""; }

Egentlig dette String bokstavelig vil bare tilsvare en normal ikke-avbrutt String:

@Test ugyldig gittAStringWithEscapedNewLines_thenTheResultHasNoNewLines () {String forventet = "Dette er en lang test som ser ut til å ha en ny linje, men faktisk ikke"; assertThat (subject.getIgnoredNewLines ()) .isEqualTo (forventet); }

6.2. Rømningsrom

Kompilatoren ignorerer alle bakrom i tekstblokker. Siden den andre forhåndsvisningen kan vi imidlertid unnslippe et mellomrom ved hjelp av den nye rømningssekvensen \ s. Kompilatoren vil også bevare eventuelle mellomrom foran dette rømte rommet.

La oss se nærmere på virkningen av et rømt rom:

offentlig String getEscapedSpaces () {return "" "linje 1 ······· linje 2 ······ \ s" ""; } @Test ugyldig gittAStringWithEscapesSpaces_thenTheResultHasLinesEndingWithSpaces () {Streng forventet = "linje 1 \ nlinje 2 \ n"; assertThat (subject.getEscapedSpaces ()) .isEqualTo (forventet); } 

Merk: mellomromene i eksemplet ovenfor er erstattet med symbolet · · for å gjøre dem synlige.

Kompilatoren fjerner mellomrommene fra første linje. Den andre linjen avsluttes imidlertid med et rømt rom, og alle rommene blir dermed bevart.

7. Konklusjon

I denne korte opplæringen så vi på Java Text Blocks-funksjonen. Det er kanskje ikke en spillveksler, men det hjelper oss å skrive bedre og mer lesbar kode, noe som generelt sett er bra.

Som alltid er hele kildekoden til artikkelen tilgjengelig på GitHub.


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