Java szövegblokkok

1. Bemutatkozás

Egy korábbi oktatóanyagban láthattuk, hogyan használhatunk többsoros karakterláncokat bármely Java verzióban és az előnézeti funkciók engedélyezése nélkül.

Ebben az oktatóanyagban meglátjuk a szövegblokkok JDK 13/14 előnézeti funkciójának használata.

2. Használat

A Java 13 óta a szövegblokkok előnézetként elérhetők. A szövegblokkok a-val kezdődnek “”” (három dupla idézőjel), amelyet opcionális szóköz és új sor követ. A legegyszerűbb példa a következőképpen nézhet ki:

Karakterlánc példa = "" "Példa szöveg" "";

Ne feledje, hogy a szövegblokk eredménytípusa továbbra is a Húr. A szövegblokkok csak egy másik módot kínálnak az írásra Húr literálok a forráskódunkban.

A szövegblokkokon belül szabadon használhatunk új sorokat és idézeteket, anélkül, hogy menekülnünk kellene. Ez lehetővé teszi számunkra, hogy a HTML, JSON, SQL vagy bármely más szó szerinti töredékét elegánsabb és olvashatóbb módon illesszük be.

Az eredményül Húr, az (alap) behúzás és az első új sor nem szerepel. A következő szakaszban megnézzük a behúzás átadását.

3. Behúzás

Szerencsére a szövegblokkok használatakor továbbra is megfelelően behúzhatjuk a kódunkat. Ennek elérése érdekében a behúzás egy részét forráskódként kezelik, míg a behúzás egy másik részét a szövegblokk részének tekintik. A működés érdekében a fordító ellenőrzi a minimális behúzást az összes nem üres sorban. Ezután a fordító balra tolja a teljes szövegblokkot.

Vegyünk egy HTML-t tartalmazó szövegblokkot:

public String getBlockOfHtml () {return "" "example text" ""; }

Ebben az esetben a minimális behúzás 12 szóköz. Így mind a 12 szóköz balra található és az összes következő soron eltávolítjuk. Teszteljük ezt:

@Test void givenAnOldStyleMultilineString_whenComparing_thenEqualsTextBlock () {String várható = "\ n" + "\ n" + "\ n" + "példa szöveg \ n" + "\ n" + ""; assertThat (subject.getBlockOfHtml ()). isEqualTo (várható); } @Test void givenAnOldStyleString_whenComparing_thenEqualsTextBlock () {String várható = "\ n \ n \ n példaszöveg \ n \ n"; assertThat (subject.getBlockOfHtml ()) .isEqualTo (várható); }

Amikor kifejezett behúzásra van szükségünk, kevesebb behúzást használhatunk egy nem üres sorra (vagy az utolsó sorra):

public String getNonStandardIndent () {return "" "Indent" ""; } @Test void givenAnIndentedString_thenMatchesIndentedOldStyle () {assertThat (subject.getNonStandardIndent ()) .isEqualTo ("Behúzás \ n"); }

Ezenkívül a szövegblokkokon belül is használhatunk menekülési lehetőséget, amint azt a következő szakaszban láthatjuk.

4. Menekülés

A szövegblokkokon belül nem kell elkerülni a dupla idézőjeleket és az új sorokat. A meneküléssel azonban hozzáadhatjuk például a kocsi visszatérését (\ r) vagy fülek (\ t) szövegblokkba. Akár a „” jelet is felhasználhatjuk a szövegblokkban, elkerülve az egyik dupla idézőjelet:

public String getTextWithEscapes () {return "" "fun with \ n whitespace \ t \ r and other escape-k \" "" ";}

Ne feledje, hogy mivel az egyetlen dupla idézőjelet és az új sort nem kell megúszni, rossz gyakorlatnak számít az elől való menekülés.

Vegye figyelembe azt is, hogy még akkor is, ha egy forrásfájlnak Windows sorvége van (\ r \ n), a szövegblokkok csak új sorokkal lesznek lezárva (\ n). Ha szállításra van szükségünk (\ r) jelenlétéhez kifejezetten hozzá kell adnunk őket a szövegblokkhoz:

public String getTextWithCarriageReturns () {return "" "elválasztva karakcióval" "; } @Test void givenATextWithCarriageReturns_thenItContainsBoth () {assertThat (subject.getTextWithCarriageReturns ()) .isEqualTo ("elválasztva \ r \ nvitel visszatér"); }

5. Formázás

A változó helyettesítés elősegítése érdekében egy új módszert adtak hozzá, amely lehetővé teszi a Karakterlánc.formátum módszer közvetlenül a String literálon:

public String getFormattedText (String paraméter) {return "" "Néhány paraméter:% s" "" .formatted (paraméter); }

Mindezek a funkciók már nagyon hatékony funkciót nyújtanak. A Java 14 azonban tartalmaz néhány további funkciót. Erről a következõben még többet megtudunk.

6. Új Escape szekvenciák a Java-ban 14

A Text Blocks szolgáltatás második előnézete két további menekülési szekvenciát ad hozzá.

6.1. Menekülő vonalvégzők

Előfordulhat, hogy a forráskódunkban hosszú szövegsorok szerepelnek, amelyeket olvasható módon szeretnénk formázni. A második előnézet hozzáadott egy olyan funkciót, amely lehetővé teszi számunkra ezt. Menekülhetünk egy új sorból, így figyelmen kívül hagyjuk:

public String getIgnoredNewLines () {return "" "Ez egy hosszú teszt, amely \ új vonallal rendelkezik, de valójában nem" ""; }

Valójában ez Húr a szó szoros értelmében megegyezik egy normál megszakítás nélküli Húr:

@Test void givenAStringWithEscapedNewLines_thenTheResultHasNoNewLines () {String várható = "Ez egy hosszú teszt, amely új vonallal rendelkezik, de valójában nincs"; assertThat (subject.getIgnoredNewLines ()) .isEqualTo (várható); }

6.2. Menekülő terek

A fordító figyelmen kívül hagyja a szövegblokkokban található összes szóközt. A második előnézet óta azonban az új menekülési sorrend segítségével megúszhatunk egy helyet \ s. A fordító megőrzi a szóközöket is a megúszott hely előtt.

Vizsgáljuk meg közelebbről a megszökött tér hatását:

public String getEscapedSpaces () {return "" "1. sor ······· 2. sor ······· s \ n" ""; } @Test void givenAStringWithEscapesSpaces_thenTheResultHasLinesEndingWithSpaces () {String várható = "1. sor \ n 2. sor \ n"; assertThat (subject.getEscapedSpaces ()) .isEqualTo (várható); } 

jegyzet: a fenti példában a szóközöket a ’· szimbólum helyettesíti, hogy láthatóvá váljanak.

A fordító eltávolítja a szóközöket az első sorból. A második sort azonban megszökött szóköz zárja le, és így minden tér megmarad.

7. Következtetés

Ebben a rövid bemutatóban megvizsgáltuk a Java Text Blocks funkciót. Lehet, hogy nem játékváltó, de ez segít nekünk jobb és olvashatóbb kód megírásában, ami általában jó dolog.

Mint mindig, a cikk teljes forráskódja elérhető a GitHubon.