1. Årsager til at undslippe karakterer

Engang lærte du, at for at kunne skrive en streng af tegn i kode, skal du pakke dem ind i dobbelte anførselstegn. Resultatet er en streng bogstavelig .

Men hvad gør vi, hvis vi har brug for anførselstegn inde i en streng bogstavelig? En streng med anførselstegn - hvad kunne være nemmere?

Lad os sige, at vi vil vise teksten "Friends" was nominated for an "Oscar". Hvordan gør du det?

Kode Noter
String s = ""Friends" was nominated for an "Oscar"";
Denne mulighed virker ikke!

Problemet er, at compileren tror, ​​du skriver fuldstændig uventet kode:

Kode Noter
String s = ""Friends" was nominated for an "Oscar"";
Denne mulighed virker ikke!

Efter at compileren støder på dobbelte anførselstegn i koden, behandler den det følgende som begyndelsen på en streng bogstavelig. Det næste dobbelte anførselstegn angiver slutningen af ​​strengen.

Så hvordan skriver man dobbelte anførselstegn inde i en bogstavelig?


2. Undslippende tegn

Der er en måde. Det kaldes undslippende tegn . Du skriver bare anførselstegnene inden for tekststrengen. Og før anførselstegnene tilføjer du symbolet \( omvendt skråstreg ).

Sådan ser strengen bogstavelig ud, når den er skrevet korrekt:

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

Compileren vil fortolke alt korrekt og vil ikke betragte anførselstegn efter omvendt skråstreg som et normalt anførselstegn.

Hvad mere er, hvis du udsender denne streng til skærmen, vil anførselstegnene med omvendte skråstreg blive behandlet korrekt, og teksten vil blive vist uden omvendte skråstreg:"Friends" was nominated for an "Oscar"

Endnu en vigtig pointe. Et anførselstegn foran en omvendt skråstreg repræsenterer et enkelt tegn: vi bruger simpelthen slick notation, der ikke forstyrrer compilerens evne til at genkende strenge bogstaver i vores kode. Du kan tildele citater til en charvariabel:

Kode Noter
char c = '\"';
\"er et tegn, ikke to
char c = '"';
Dette er også muligt: ​​et dobbelt anførselstegn inden for enkelte anførselstegn

3. Almindelige situationer, der opstår, når man undslipper tegn

Almindelige situationer, der involverer flygtende karakterer

Ud over dobbelte anførselstegn er der mange andre tegn, som compileren håndterer på en særlig måde. For eksempel et linjeskift.

Hvordan føjer vi et linjeskift til et bogstav? Der er også en speciel kombination til dette:

\n
Linjeskift karakter

Hvis du har brug for at tilføje et linjeskift til en streng-literal, skal du blot tilføje et par tegn: \n.

Eksempel:

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

Der er i alt 8 specielle kombinationer som denne, som også kaldes escape-sekvenser . Her er de:

Kode Beskrivelse
\t Indsæt et tabulatortegn
\b Indsæt et backspace- tegn
\n Indsæt et linjeskifttegn
\r Indsæt et vognreturtegn
\f Indsæt et sidefeed- tegn
\' Indsæt et enkelt anførselstegn
\" Indsæt et dobbelt anførselstegn
\\ Indsæt en omvendt skråstreg

Du kender to af dem, men hvad betyder de andre 6?

\ter et tabulatortegn

Når denne tekst vises i tekst, svarer det til at trykke på Tabtasten, mens du skriver. Det flytter den tekst, der følger efter den, og gør det muligt at justere tekst.

Eksempel:

Kode Konsoludgang
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

\bbetyder 'gå et tegn tilbage'

Denne sekvens i en streng svarer til at trykke på Backspacetasten på tastaturet. Det fjerner tegnet, der går forud:

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

\rer vognretur-karakteren

Dette tegn flytter markøren til begyndelsen af ​​den aktuelle linje uden at ændre teksten. Det næste, der vises næste gang, vil overskrive den eksisterende streng.

Eksempel:

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

\fer et sidefeed-tegn

Dette symbol kommer ned til os fra tiden med de første matrixprintere. Udskrivning af denne sekvens til en printer vil få printeren til blot at fremføre det aktuelle ark uden at udskrive nogen tekst, indtil en ny side begynder.

Nu vil vi kalde det et sideskift eller ny side .

\\er et skråstreg

Alt er ligetil her. Hvis vi bruger en skråstreg til at undslippe tegn i vores tekst, hvordan skriver vi så selve skråstreg i strengen?

Det er enkelt: Tilføj en omvendt skråstreg til teksten - du skal skrive to i træk.

Eksempel:

Kode Konsoludgang
System.out.println("c:\projects\my\first");
Compileren vil råbe af dig efter ukendte undslupne karakterer.
System.out.println("c:\\projects\\my\\first");
Sådan er det gjort rigtigt!


4. Unicode-kodning

Som du allerede ved, svarer hvert tegn, der vises på skærmen, til en bestemt numerisk kode. Et standardiseret sæt af disse koder kaldes en kodning .

Engang, da computere blev opfundet for nylig, var syv bits (mindre end én byte) nok til at kode hvert tegn. Den første kodning indeholdt kun 128 tegn. Denne kodning blev kaldt ASCII .

ASCII står for American Standard Code for Information Interchange - en standard amerikansk kodetabel for printbare tegn og nogle specielle koder.

Den består af 33 ikke-udskrivbare kontroltegn (som påvirker, hvordan tekst og mellemrum behandles) og 95 udskrivbare tegn, inklusive tal, store og små latinske bogstaver og flere tegnsætningstegn.

Unicode-kodning

Efterhånden som computere voksede i popularitet, begyndte hvert land at frigive sin egen kodning. Normalt tog de udgangspunkt i ASCII og erstattede sjældent brugte ASCII-tegn med symboler fra deres respektive alfabeter.

Med tiden opstod en idé: skab en enkelt kodning, der indeholder alle tegnene i hver kodning i verden.

Unicode-kodning 1

I 1993 blev Unicode- kodningen således skabt, og Java-sproget blev det første programmeringssprog, der brugte denne kodning som standard for lagring af tekst. Nu er Unicode standarden for hele it-branchen.

Selvom Unicode selv er standarden, har den flere repræsentationer eller Unicode-transformationsformater (UTF): UTF-8, UTF-16 og UTF-32 osv.

Java bruger en avanceret version af Unicode-kodning — UTF-16: hvert tegn er kodet i 16 bit (2 bytes). Den kan rumme op til 65.536 tegn!

Du kan finde næsten alle tegn i hvert alfabet i verden i denne kodning. Naturligvis er der ingen, der har lært det hele udenad. Man kan ikke vide alt, men man kan google alt.

For at skrive et Unicode-tegn i dit program ved hjælp af dets kode, skal du skrive \u+ koden i hexadecimal . For eksempel,\u00A9

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


5. Unicode: kodepunkt

"640 kilobytes burde være nok til alle! Eller ej". (Citat tilskrevet Bill Gates)

Livet er barskt, og med tiden begyndte UTF-16-kodningen at være utilstrækkelig. Det viser sig, at der er mange asiatiske sprog, og de har mange glyffer. Og alle disse glyffer kan simpelthen ikke proppes i 2 bytes.

Hvad kan gøres? Brug flere bytes !

Men char-typen er kun 2 bytes, og at ændre den til 4 er ikke så let: Der er skrevet milliarder af linjer med Java-kode over hele verden, som ville gå i stykker, hvis char-typen pludselig bliver 4 bytes til en Java-maskine. Så vi kan ikke ændre char-typen!

Der er en anden tilgang. Husk, hvordan vi undslipper karakterer ved at sætte en skråstreg foran dem. Grundlæggende kodede vi et enkelt tegn ved hjælp af flere tegn.

Javas skabere besluttede at bruge den samme tilgang.

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

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

Nu kan dit Java-program endda udsende emojis til konsollen 😎