Kotlin strengmaler

1. Oversikt

I denne opplæringen forklarer vi hva Kotlin har String maler er og hvordan du bruker dem.

For å bli kjent med andre funksjoner og vite hvordan du bruker Kotlin, ta en titt på en av våre Kotlin-opplæringsprogrammer.

2. Strenger i Kotlin

Som i Java, Strenger i Kotlin er uforanderlige. Det betyr at vi ikke har noen mulighet til å endre en String når den er opprettet. Imidlertid kan vi utlede en annen String fra en gitt en.

Kotlin har beriket Java String klasse med tilleggsfunksjonalitet.

For eksempel metoden padEnd () lar oss formatere a Streng, slik at uttrykket:

"Hei" .padEnd (10, '!')

Som produserer en ny streng "Hallo!!!!!".

3. Strengmaler

Strengmaler er String bokstaver som inneholder innebygde uttrykk.

For eksempel denne koden i Java:

Strengmelding = "n =" + n;

I Kotlin er bare:

val melding = "n = $ n"

Ethvert gyldig Kotlin-uttrykk kan brukes i en String mal:

val message = "n + 1 = $ {n + 1}"

I motsetning til Java er mange Kotlins konstruksjoner (men absolutt ikke alle) uttrykk.

Derfor er en String malen kan også inneholde logikk:

val message = "$ n er $ {if (n> 0)" positiv "ellers" ikke positiv "} 

Legg merke til at inne i de krøllete parentesene er det et gyldig Kotlin-uttrykk. Dette er en grunn til at vi ikke unnslipper de nestede dobbeltsitatene.

String maler løses ved å evaluere uttrykket og påkalle a toString () metode på resultatet av evalueringen.

String maler kan nestes:

val message = "$ n er $ {if (n> 0)" positiv "ellers hvis (n <0)" negativ og $ {if (n% 2 == 0) "til og med" ellers "odd"} "annet" null"}"

De String malparser begynner å løse den fra den mest nestede malen, vurderer den og påkaller a toString () metode på den.

Selv om String maler kan være nestet, det er lurt å ha dem så enkle som mulig. Dette er ikke vanskelig i det hele tatt fordi Kotlin gir oss mange nyttige verktøy.

Hva om vi vil bruke et rått dollartegn og ikke som en del av et String mal?

Så unnslipper vi det ved å sette et tilbakeslag foran det:

val melding = "n = \ $ n"

Det som følger dollartegnet blir vanlig String - det blir ikke evaluert lenger, og det tolkes som det er.

4. Råstrenger

I Kotlin har vi i tillegg trippel-siterte råstrenger som kan inneholde spesialtegn uten å måtte unnslippe dem.

Resultatet String er inneholdt mellom to påfølgende ikke-overlappende forekomster av trippel dobbelt-sitat-tegn .

For eksempel i Java, for å skape riktig a String som inneholder en filsti i Windows-stil til en ressurs som ligger på C: \ Repository \ read.me, vi bør definere det på denne måten:

Strengsti = "C: \ Repository \ read.me"

I Kotlin kan vi bruke trippel-sitert notasjon for å oppnå samme resultat:

val path = "" "C: \ Repository \ read.me" ""

Vi kan bruke denne notasjonen for å opprette en flerlinje Streng:

val receipt = "" "Item 1: $ 1.00 Item 2: $ 0.50" ""

Som skaper en String som strekker seg over nøyaktig to linjer. Hvis vi foretrekker denne fordypningen:

val receipt = "" "Item 1: $ 1.00> Item 2: $ 0.50" "". trimMargin (">")

Vi bruker en trimMargin () metode som eliminerer eventuelle hvite mellomrom fra begynnelsen av hver linje til den første forekomsten av marginprefikset (> i eksemplet ovenfor).

Trippel siterte strenger støtter ikke noen rømningssekvenser. Det betyr at hvis vi skrev

val kvittering = "" "Vare 1: $ 1,00 \ nProdukt 2: $ 0,50" ""

for å få en to-linje Streng, vi får en enkelt linje som inneholder tegnene \ n i stedet for forventet linjeskift.

Trippel sitert Strenger gjør støtte maler skjønt.

Det betyr at enhver sekvens som begynner med dollartegnet blir løst til en streng på en måte som vi har beskrevet i forrige avsnitt. Vi kan bruke dette faktum for å få fluktfigurene til å fungere:

val receipt = "" "Item 1: $ 1,00 $ {" \ n "} Item 2: $ 0,50" ""

5. Konklusjon

I denne artikkelen har vi vurdert en funksjon av Kotlin-språket som er fraværende i Java - String maler. Vi har illustrert bruken av dem i tilfelle vanlig og flerlinjet Strenger.

Du kan finne alle kodebiter som er nevnt her, i depotet vårt på GitHub.


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