1. Årsaker til å unnslippe karakterer

En gang i tiden lærte du at for å skrive en streng med tegn i kode, må du pakke dem inn i doble anførselstegn. Resultatet er en streng bokstavelig .

Men hva gjør vi hvis vi trenger anførselstegn inne i en streng bokstavelig? En streng som inneholder anførselstegn – hva kan være enklere?

La oss si at vi vil vise teksten "Friends" was nominated for an "Oscar". Hvordan gjør du det?

Kode Notater
String s = ""Friends" was nominated for an "Oscar"";
Dette alternativet vil ikke fungere!

Problemet er at kompilatoren tror du skriver helt uventet kode:

Kode Notater
String s = ""Friends" was nominated for an "Oscar"";
Dette alternativet vil ikke fungere!

Etter at kompilatoren møter doble anførselstegn i koden, behandler den det som følger som begynnelsen på en streng bokstavelig. Det neste doble anførselstegn indikerer slutten av strengen.

Så hvordan skriver du doble anførselstegn inne i en bokstavelig?


2. Rømmende tegn

Det er en måte. Det kalles unnslippende tegn . Du skriver bare anførselstegn innenfor tekststrengen. Og før anførselstegnene legger du til symbolet \( omvendt skråstrek ).

Slik ser strengen bokstavelig ut når den er skrevet riktig:

Kode Notater
String s = "\"Friends\" was nominated for an \"Oscar\"";
Dette vil fungere!

Kompilatoren vil tolke alt riktig og vil ikke betrakte anførselstegn etter omvendt skråstrek som et normalt anførselstegn.

Dessuten, hvis du sender ut denne strengen til skjermen, vil anførselstegnene med omvendte skråstreker bli behandlet riktig, og teksten vil vises uten omvendte skråstreker:"Friends" was nominated for an "Oscar"

Et annet viktig poeng. Et anførselstegn foran et omvendt skråstrek representerer et enkelt tegn: vi bruker ganske enkelt glatt notasjon som ikke forstyrrer kompilatorens evne til å gjenkjenne strengliteraler i koden vår. Du kan tilordne anførselstegn til en charvariabel:

Kode Notater
char c = '\"';
\"er ett tegn, ikke to
char c = '"';
Dette er også mulig: et dobbelt anførselstegn i enkle anførselstegn

3. Vanlige situasjoner som oppstår når du unnslipper tegn

Vanlige situasjoner som involverer unnslippende karakterer

I tillegg til doble anførselstegn er det mange andre tegn som kompilatoren håndterer på en spesiell måte. For eksempel et linjeskift.

Hvordan legger vi til et linjeskift til en bokstavelig? Det er også en spesiell kombinasjon for dette:

\n
Linjeskiftkarakter

Hvis du trenger å legge til et linjeskift i en streng bokstavelig, trenger du bare å legge til et par tegn: \n.

Eksempel:

Kode Konsollutgang
System.out.println("Best regards, \n Anonymous");
Best regards,
Anonymous

Det er totalt 8 spesielle kombinasjoner som denne, som også kalles escape-sekvenser . Her er de:

Kode Beskrivelse
\t Sett inn et tabulatortegn
\b Sett inn et tilbaketegn
\n Sett inn et linjeskifttegn
\r Sett inn et vognreturtegn
\f Sett inn et sidefeedtegn
\' Sett inn et enkelt anførselstegn
\" Sett inn et dobbelt anførselstegn
\\ Sett inn en omvendt skråstrek

Du er kjent med to av dem, men hva betyr de andre 6?

\ter et tabulatortegn

Når denne teksten vises i tekst, tilsvarer det å trykke på Tabtasten mens du skriver. Den forskyver teksten som følger den og gjør det mulig å justere tekst.

Eksempel:

Kode Konsollutgang
System.out.println("0\t1\t2\t3");
System.out.println("0\t10\t20\t30");
System.out.println("0\t100\t200\t300");
0       1        2        3
0       10       20       30
0       100      200      300

\bbetyr "gå tilbake ett tegn"

Denne sekvensen i en streng tilsvarer å trykke på Backspacetasten på tastaturet. Det fjerner tegnet som går foran det:

Kode Konsollutgang
System.out.println("Hello\b\b World");
Hell World!

\rer vognretur-tegnet

Dette tegnet flytter markøren til begynnelsen av gjeldende linje uten å endre teksten. Det neste som vises, vil overskrive den eksisterende strengen.

Eksempel:

Kode Konsollutgang
System.out.println("Greetings\r World!");
World!

\fer et sidefeedtegn

Dette symbolet kommer ned til oss fra de første matriseskrivernes dager. Å sende denne sekvensen til en skriver vil føre til at skriveren ganske enkelt mater ut det gjeldende arket, uten å skrive ut noen tekst, til en ny side begynner.

Nå vil vi kalle det et sideskift eller ny side .

\\er en omvendt skråstrek

Alt er greit her. Hvis vi bruker en omvendt skråstrek for å unnslippe tegn i teksten vår, hvordan skriver vi da et omvendt skråstrektegn i strengen?

Det er enkelt: legg til en omvendt skråstrek i teksten - du må skrive to på rad.

Eksempel:

Kode Konsollutgang
System.out.println("c:\projects\my\first");
Kompilatoren vil rope på deg for ukjente rømte karakterer.
System.out.println("c:\\projects\\my\\first");
Det er slik det er gjort riktig!


4. Unicode-koding

Som du allerede vet, tilsvarer hvert tegn som vises på skjermen en bestemt numerisk kode. Et standardisert sett med disse kodene kalles en koding .

En gang i tiden, da datamaskiner nylig ble oppfunnet, var syv bits (mindre enn én byte) nok til å kode hvert tegn. Den første kodingen inneholdt bare 128 tegn. Denne kodingen ble kalt ASCII .

ASCII står for American Standard Code for Information Interchange - en standard amerikansk kodetabell for utskrivbare tegn og noen spesialkoder.

Den består av 33 ikke-utskrivbare kontrolltegn (som påvirker hvordan tekst og mellomrom behandles) og 95 utskrivbare tegn, inkludert tall, store og små latinske bokstaver, og flere skilletegn.

Unicode-koding

Etter hvert som datamaskiner vokste i popularitet, begynte hvert land å gi ut sin egen koding. Vanligvis tok de utgangspunkt i ASCII og erstattet sjelden brukte ASCII-tegn med symboler fra deres respektive alfabeter.

Over tid dukket det opp en idé: lag en enkelt koding som inneholder alle tegnene til hver koding i verden.

Unicode-koding 1

I 1993 ble således Unicode- kodingen opprettet, og Java-språket ble det første programmeringsspråket som brukte denne kodingen som standard for lagring av tekst. Nå er Unicode standarden for hele IT-bransjen.

Selv om Unicode i seg selv er standarden, har den flere representasjoner eller Unicode-transformasjonsformater (UTF): UTF-8, UTF-16 og UTF-32, etc.

Java bruker en avansert versjon av Unicode-koding — UTF-16: hvert tegn er kodet i 16 biter (2 byte). Den kan romme opptil 65 536 tegn!

Du kan finne nesten alle tegn i alle alfabeter i verden i denne kodingen. Naturligvis er det ingen som har husket hele greia. Du kan ikke vite alt, men du kan google alt.

For å skrive et Unicode-tegn i programmet ditt ved å bruke koden, må du skrive \u+ koden i heksadesimal . For eksempel,\u00A9

Kode Konsollutgang
System.out.println("\u00A9 CodeGym");
© CodeGym


5. Unicode: kodepunkt

"640 kilobyte burde være nok for alle! Eller ikke". (Sitat tilskrevet Bill Gates)

Livet er røft, og over tid begynte UTF-16-kodingen å være utilstrekkelig. Det viser seg at det er mange asiatiske språk, og de har mange glyfer. Og alle disse tegnene kan rett og slett ikke stappes inn i 2 byte.

Hva kan bli gjort? Bruk flere byte !

Men char-typen er bare 2 byte og å endre den til 4 er ikke så lett: milliarder av linjer med Java-kode er skrevet over hele verden, som ville gå i stykker hvis char-typen plutselig blir 4 byte en Java-maskin. Så vi kan ikke endre røyetypen!

Det er en annen tilnærming. Husk hvordan vi unnslipper karakterer ved å sette et skråstrek foran dem. I utgangspunktet kodet vi et enkelt tegn ved å bruke flere tegn.

Javas skapere bestemte seg for å bruke samme tilnærming.

Noen tegn som visuelt vises som et enkelt tegn, er kodet som to chars i en streng:

Kode Konsollutgang
System.out.println("\uD83D\uDD0A");
🔊

Nå kan Java-programmet ditt til og med sende ut emojier til konsollen 😎