Java-tekstblokke

1. Introduktion

I en tidligere vejledning så vi, hvordan vi kan bruge streng med flere linjer i enhver Java-version og uden at aktivere forhåndsvisning.

I denne vejledning ser vi hvordan man bruger forhåndsvisning af JDK 13/14 i tekstblokke.

2. Anvendelse

Siden Java 13 er tekstblokke tilgængelige som en preview-funktion. Tekstblokke starter med en “”” (tre anførselstegn) efterfulgt af valgfrit mellemrum og en ny linje. Det mest enkle eksempel kunne se ud:

Strengeksempel = "" "Eksempeltekst" "";

Bemærk, at resultattypen for en tekstblok stadig er en Snor. Tekstblokke giver os bare en anden måde at skrive på Snor bogstaver i vores kildekode.

Inde i tekstblokkene kan vi frit bruge nye linjer og citater uden behov for at flygte. Det giver os mulighed for at inkludere bogstavelige fragmenter af HTML, JSON, SQL eller hvad vi har brug for på en mere elegant og læselig måde.

I det resulterende Snor, (basis) indrykket og den første nye linje er ikke inkluderet. Vi ser på afleveringen af ​​indrykket i det næste afsnit.

3. Indrykning

Heldigvis, når vi bruger tekstblokke, kan vi stadig indrykke vores kode korrekt. For at opnå dette behandles en del af indrykket som kildekoden, mens en anden del af indrykket ses som en del af tekstblokken. For at få dette til at arbejde, kontrollerer kompilatoren for minimumsindrykket i alle ikke-tomme linjer. Derefter skifter compileren den komplette tekstblok til venstre.

Overvej en tekstblok, der indeholder noget HTML:

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

I dette tilfælde er minimumindrykket 12 mellemrum. Således alle 12 mellemrum til venstre for og på alle efterfølgende linjer fjernes. Lad os teste dette:

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

Når vi har brug for eksplicit indrykning, kan vi bruge mindre indrykning til en ikke-tom linje (eller den sidste linje):

offentlig streng getNonStandardIndent () {return "" "Indrykning" ""; } @Test ugyldigt givenAnIndentedString_thenMatchesIndentedOldStyle () {assertThat (subject.getNonStandardIndent ()) .isEqualTo ("Indent \ n"); }

Desuden kan vi også bruge undslippe inde i tekstblokke, som vi vil se i næste afsnit.

4. Undslipper

Inde i tekstblokke behøver dobbelt citater og nye linjer ikke undslippe. Vi kan dog bruge escaping for at tilføje for eksempel vognretur (\ r) eller faner (\ t) til en tekstblok. Vi kunne endda bruge "" "igen i vores tekstblok ved at undslippe et af dobbelt-citaterne:

offentlig String getTextWithEscapes () {return "" "sjov med \ n hvidt mellemrum \ t \ r og andre undslip \" "" "";}

Vær opmærksom på, at fordi dobbelt-anførselstegn og nye linjer ikke skal undgås, betragtes det som dårlig praksis at undslippe dem.

Bemærk også, at selvom en kildefil har Windows-linieendelser (\ r \ n), afsluttes tekstblokkene kun med nye linjer (\ n). Hvis vi har brug for vognretur (\ r) for at være til stede skal vi eksplicit tilføje dem til tekstblokken:

public String getTextWithCarriageReturns () {return "" "adskilt med \ carriage retur" ""; } @Test ugyldigt givenATextWithCarriageReturns_thenItContainsBoth () {assertThat (subject.getTextWithCarriageReturns ()) .isEqualTo ("adskilt med \ r \ ncarriage returnerer"); }

5. Formatering

For at hjælpe med variabel erstatning blev der tilføjet en ny metode, der muliggør opkald til Streng.format metode direkte på en streng bogstavelig:

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

Alle disse funktioner giver allerede en meget kraftig funktion. Java 14 har dog inkluderet nogle ekstra funktioner. Vi ser mere om det næste.

6. Nye flugtsekvenser i Java 14

Den anden forhåndsvisning af Tekstblokfunktionen tilføjer to yderligere escape-sekvenser.

6.1. Flygtende linjeterminatorer

Nogle gange kan vi have lange tekstlinjer i vores kildekode, som vi vil formatere på en læsbar måde. Den anden forhåndsvisning tilføjede en funktion, der giver os mulighed for at gøre dette. Vi kan undslippe en ny linje, så den ignoreres:

public String getIgnoredNewLines () {return "" "Dette er en lang test, der ser ud til at \ have en ny linje, men faktisk ikke" ""; }

Faktisk dette Snor bogstavelig vil bare svare til en normal ikke-afbrudt Snor:

@Test ugyldigt givenAStringWithEscapedNewLines_thenTheResultHasNoNewLines () {String expected = "Dette er en lang test, der ser ud til at have en ny linje, men faktisk ikke"; assertThat (subject.getIgnoredNewLines ()) .isEqualTo (forventet); }

6.2. Undslippe pladser

Compileren ignorerer alle bageste mellemrum i tekstblokke. Men siden den anden forhåndsvisning kan vi undslippe et rum ved hjælp af den nye flugtsekvens \ s. Compileren vil også bevare eventuelle mellemrum foran dette undslapte rum.

Lad os se nærmere på virkningen af ​​et undsluppet rum:

public String getEscapedSpaces () {return "" "line 1 ······· line 2 ······ \ s" ""; } @Test ugyldigt givetAStringWithEscapesSpaces_thenTheResultHasLinesEndingWithSpaces () {Streng forventet = "linje 1 \ nline 2 \ n"; assertThat (subject.getEscapedSpaces ()) .isEqualTo (forventet); } 

Bemærk: mellemrummene i eksemplet ovenfor erstattes med symbolet '·' for at gøre dem synlige.

Compileren fjerner mellemrumene fra den første linje. Den anden linje afsluttes imidlertid med et undsluppet rum, og alle rumene bevares således.

7. Konklusion

I denne korte vejledning kiggede vi på Java Text Blocks-funktionen. Det er muligvis ikke en game-changer, men det hjælper os med at skrive bedre og mere læselig kode, hvilket generelt er en god ting.

Som altid er artiklens fulde kildekode tilgængelig på GitHub.