Blokovi Java teksta

1. Uvod

U prethodnom uputstvu vidjeli smo kako možemo koristiti višeredne nizove u bilo kojoj inačici Java i bez omogućavanja značajki pregleda.

U ovom uputstvu ćemo vidjeti kako se koristi značajka JDK 13/14 pregleda tekstualnih blokova.

2. Upotreba

Od Java 13, blokovi teksta dostupni su kao značajka pregleda. Tekstualni blokovi počinju s a “”” (tri dvostruka navodnika), nakon čega slijede neobavezni razmaci i novi redak. Najjednostavniji primjer mogao bi izgledati:

String primjer = "" "Primjer teksta" "";

Imajte na umu da je vrsta rezultata tekstnog bloka i dalje a Niz. Tekstualni blokovi pružaju nam još jedan način pisanja Niz u našem izvornom kodu.

Unutar tekstnih blokova možemo slobodno koristiti nove retke i citate bez potrebe za bijegom. Omogućuje nam uključivanje doslovnih fragmenata HTML-a, JSON-a, SQL-a ili onoga što nam treba na elegantniji i čitljiviji način.

U rezultirajućem Niz, (osnovno) uvlačenje i prva nova crta nisu uključeni. U sljedećim ćemo odjeljcima pogledati predaju uvlaka.

3. Udubljenje

Srećom, kada koristimo blokove teksta, i dalje možemo pravilno uvlačiti kod. Da bi se to postiglo, dio uvlačenja tretira se kao izvorni kod, dok se drugi dio uvlačenja vidi kao dio tekstualnog bloka. Da bi ovo uspjelo, kompajler provjerava minimalno uvlačenje svih nepraznih redaka. Dalje, prevodilac pomiče cijeli blok teksta ulijevo.

Razmotrite blok teksta koji sadrži neki HTML:

javni String getBlockOfHtml () {return "" "primjer teksta" ""; }

U ovom je slučaju minimalno uvlačenje 12 razmaka. Dakle, svih 12 razmaka lijevo od i na svim sljedećim linijama se uklanjaju. Isprobajmo ovo:

@Test void givenAnOldStyleMultilineString_whenComparing_thenEqualsTextBlock () {String očekuje = "\ n" + "\ n" + "\ n" + "primjer teksta \ n" + "\ n" + ""; assertThat (subject.getBlockOfHtml ()). isEqualTo (očekuje se); } @Test void givenAnOldStyleString_whenComparing_thenEqualsTextBlock () {String očekuje = "\ n \ n \ n primjer teksta \ n \ n"; assertThat (subject.getBlockOfHtml ()) .isEqualTo (očekuje se); }

Kad trebamo eksplicitno uvlačenje, možemo koristiti manje uvlačenja za prazan redak (ili zadnji redak):

javni String getNonStandardIndent () {return "" "Uvlačenje" ""; } @Test void givenAnIndentedString_thenMatchesIndentedOldStyle () {assertThat (subject.getNonStandardIndent ()) .isEqualTo ("Uvlaka \ n"); }

Štoviše, možemo koristiti i bijeg unutar blokova teksta, kao što ćemo vidjeti u sljedećem odjeljku.

4. Bijeg

Unutar blokova teksta dvostruki navodnici i novi redovi ne moraju se izbjeći. Međutim, bijeg možemo koristiti za dodavanje, na primjer, vraćanja kočije (\ r) ili kartice (\ t) u blok teksta. Čak bismo mogli ponovno upotrijebiti "" "u našem tekstualnom bloku izbjegavanjem jednog od dvostrukih navodnika:

javni String getTextWithEscapes () {povratak "" "zabave s \ n razmakom \ t \ r i ostalim bijegovima \" "" "" ";}

Imajte na umu da se smatra da je loša praksa izbjegavati jednostruke navodnike i nove retke jer se ne moraju izbjeći.

Također imajte na umu da čak i ako izvorna datoteka ima završetak Windows redaka (\ r \ n), blokovi teksta prekinut će se samo s novim redovima (\ n). Ako trebamo povratak kočije (\ r) da bi bili prisutni, moramo ih izričito dodati u blok teksta:

javni String getTextWithCarriageReturns () {return "" "odvojeno s \ r carriage return" ""; } @Test void givenATextWithCarriageReturns_thenItContainsBoth () {assertThat (subject.getTextWithCarriageReturns ()) .isEqualTo ("odvojeno s \ r \ npovratak kočije"); }

5. Oblikovanje

Kao pomoć kod zamjene varijabli dodana je nova metoda koja omogućuje pozivanje String.format metoda izravno na String literal:

javni String getFormattedText (parametar niza) {return "" "Neki parametar:% s" "" .formatted (parametar); }

Sve ove značajke već pružaju vrlo moćnu značajku. Međutim, Java 14 ima neke dodatne značajke. O tome ćemo vidjeti više sljedeće.

6. Nove Escape Sekvence u Javi 14

Drugi pregled značajke Text Blocks dodaje dvije dodatne sekvence bijega.

6.1. Terminatori za bijeg

Ponekad bismo u izvornom kodu mogli imati duge retke teksta koje želimo formatirati na čitljiv način. Drugi pregled dodao je značajku koja nam to omogućuje. Novoj liniji možemo pobjeći tako da se zanemari:

public String getIgnoredNewLines () {return "" "Ovo je dugačak test koji izgleda \ ima novu liniju, ali zapravo nema" ""; }

Zapravo ovo Niz doslovno će biti jednako normalnom neprekinutom Niz:

@Test void givenAStringWithEscapedNewLines_thenTheResultHasNoNewLines () {String očekuje = "Ovo je dugačak test za koji se čini da ima novu liniju, ali zapravo nema"; assertThat (subject.getIgnoredNewLines ()) .isEqualTo (očekuje se); }

6.2. Izbjegavanje prostora

Prevoditelj ignorira sve prazne prostore u blokovima teksta. Međutim, od drugog pregleda možemo pobjeći iz prostora koristeći novi slijed za bijeg \ s. Prevoditelj će također sačuvati sve prostore ispred ovog pobjeglog prostora.

Pogledajmo bliže utjecaj pobjeglog prostora:

javni String getEscapedSpaces () {return "" "linija 1 ········ linija 2 ······· \ s" ""; } @Test void givenAStringWithEscapesSpaces_thenTheResultHasLinesEndingWithSpaces () {String očekuje = "line 1 \ nline 2 \ n"; assertThat (subject.getEscapedSpaces ()) .isEqualTo (očekuje se); } 

Bilješka: razmaci u gornjem primjeru zamjenjuju se simbolom '·' kako bi bili vidljivi.

Kompajler će ukloniti razmake iz prvog retka. Međutim, drugi redak završava se izbjegnutim prostorom i svi su prostori na taj način sačuvani.

7. Zaključak

U ovom kratkom vodiču pogledali smo značajku Java Text Blocks. Možda to nije izmjenjivač igara, ali pomaže nam da napišemo bolji i čitljiviji kôd, što je općenito dobro.

Kao i uvijek, puni izvorni kôd članka dostupan je na GitHub-u.


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