1. Orsaker till att tecken flyr

En gång i tiden lärde du dig att för att skriva en sträng med tecken i kod måste du linda in dem med dubbla citattecken. Resultatet är en bokstavlig sträng .

Men vad gör vi om vi behöver citattecken inuti en bokstavlig sträng? En sträng som innehåller citattecken — vad kan vara enklare?

Låt oss säga att vi vill visa texten "Friends" was nominated for an "Oscar". Hur gör man det?

Koda Anteckningar
String s = ""Friends" was nominated for an "Oscar"";
Det här alternativet kommer inte att fungera!

Problemet är att kompilatorn tror att du skriver helt oväntad kod:

Koda Anteckningar
String s = ""Friends" was nominated for an "Oscar"";
Det här alternativet kommer inte att fungera!

Efter att kompilatorn stöter på dubbla citattecken i koden, behandlar den det som följer som början på en bokstavlig sträng. Nästa dubbla citattecken anger slutet på strängen.

Så hur skriver man dubbla citattecken i en bokstavlig?


2. Flyktande tecken

Det finns ett sätt. Det kallas att fly tecken . Du skriver bara citattecken inom textsträngen. Och före citattecken lägger du till symbolen \( omvänt snedstreck) .

Så här ser strängen bokstavlig ut när den är korrekt skriven:

Koda Anteckningar
String s = "\"Friends\" was nominated for an \"Oscar\"";
Detta kommer att fungera!

Kompilatorn kommer att tolka allt korrekt och kommer inte att betrakta citattecken efter snedstrecket som ett normalt citattecken.

Dessutom, om du matar ut den här strängen på skärmen, kommer citattecken med omvänt snedstreck att bearbetas korrekt, och texten kommer att visas utan några omvända snedstreck:"Friends" was nominated for an "Oscar"

En annan viktig punkt. Ett citattecken som föregås av ett omvänt snedstreck representerar ett enda tecken: vi använder helt enkelt slick notation som inte stör kompilatorns förmåga att känna igen strängliteraler i vår kod. Du kan tilldela citattecken till en charvariabel:

Koda Anteckningar
char c = '\"';
\"är ett tecken, inte två
char c = '"';
Detta är också möjligt: ​​ett dubbelt citattecken inom enkla citattecken

3. Vanliga situationer som uppstår när man undviker tecken

Vanliga situationer som involverar flyende karaktärer

Förutom dubbla citattecken finns det många andra tecken som kompilatorn hanterar på ett speciellt sätt. Till exempel en radbrytning.

Hur lägger vi till en radbrytning till en bokstavlig? Det finns också en speciell kombination för detta:

\n
Radbrytningskaraktär

Om du behöver lägga till en radbrytning till en bokstavlig sträng behöver du bara lägga till ett par tecken: \n.

Exempel:

Koda Konsolutgång
System.out.println("Best regards, \n Anonymous");
             
Best regards,
Anonymous

Det finns totalt 8 speciella kombinationer som denna, som också kallas flyktsekvenser . Här är de:

Koda Beskrivning
\t Infoga ett tabbtecken
\b Infoga ett backstegstecken
\n Infoga ett nyradstecken
\r Infoga ett vagnreturtecken
\f Infoga ett sidmatningstecken
\' Infoga ett enda citattecken
\" Infoga ett dubbelt citattecken
\\ Infoga ett snedstreck

Du är bekant med två av dem, men vad betyder de andra sex?

\tär ett tabbtecken

När den här texten visas i text motsvarar det att trycka på Tabknappen medan du skriver. Den förskjuter texten som följer den och gör det möjligt att justera text.

Exempel:

Koda Konsolutgång
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å tillbaka en karaktär"

Denna sekvens i en sträng motsvarar att trycka på Backspacetangenten på tangentbordet. Det tar bort tecknet som föregår det:

Koda Konsolutgång
System.out.println("Hello\b\b World");
Hell World!

\rär vagnreturtecknet

Detta tecken flyttar markören till början av den aktuella raden utan att ändra texten. Vad som än visas härnäst kommer att skriva över den befintliga strängen.

Exempel:

Koda Konsolutgång
System.out.println("Greetings\r World!");
World!

\fär ett sidflödestecken

Denna symbol kommer ner till oss från de första matrisskrivarnas dagar. Att mata ut denna sekvens till en skrivare skulle få skrivaren att helt enkelt mata ut det aktuella arket, utan att skriva ut någon text, tills en ny sida börjar.

Nu skulle vi kalla det en sidbrytning eller ny sida .

\\är ett snedstreck

Allt är okomplicerat här. Om vi ​​använder ett omvänt snedstreck för att undvika tecken i vår text, hur skriver vi då ett omvänt snedstreck i strängen?

Det är enkelt: lägg till ett snedstreck i texten — du måste skriva två i rad.

Exempel:

Koda Konsolutgång
System.out.println("c:\projects\my\first");
Kompilatorn kommer att skrika åt dig efter okända förrymda karaktärer.
System.out.println("c:\\projects\\my\\first");
Det är så det görs rätt!


4. Unicode-kodning

Som du redan vet motsvarar varje tecken som visas på skärmen en specifik sifferkod. En standardiserad uppsättning av dessa koder kallas för encoding .

En gång i tiden, när datorer nyligen uppfanns, räckte sju bitar (mindre än en byte) för att koda varje tecken. Den första kodningen innehöll endast 128 tecken. Denna kodning kallades ASCII .

ASCII står för American Standard Code for Information Interchange — en amerikansk standardkodtabell för utskrivbara tecken och vissa specialkoder.

Den består av 33 icke-utskrivbara kontrolltecken (som påverkar hur text och mellanslag bearbetas) och 95 utskrivbara tecken, inklusive siffror, versaler och gemener latinska bokstäver och flera skiljetecken.

Unicode-kodning

När datorer växte i popularitet började varje land släppa sin egen kodning. Vanligtvis tog de ASCII som utgångspunkt och ersatte sällan använda ASCII-tecken med symboler från deras respektive alfabet.

Med tiden dök en idé upp: skapa en enda kodning som innehåller alla tecken från varje kodning i världen.

Unicode-kodning 1

Således skapades Unicode- kodningen 1993, och Java-språket blev det första programmeringsspråket som använde denna kodning som standard för att lagra text. Nu är Unicode standarden för hela IT-branschen.

Även om Unicode i sig är standarden, har den flera representationer eller Unicode-transformationsformat (UTF): UTF-8, UTF-16 och UTF-32, etc.

Java använder en avancerad version av Unicode-kodning — UTF-16: varje tecken kodas i 16 bitar (2 byte). Den kan rymma upp till 65 536 tecken!

Du kan hitta nästan alla tecken i alla alfabet i världen i denna kodning. Naturligtvis har ingen det hela memorerat. Man kan inte veta allt, men man kan googla på allt.

För att skriva ett Unicode-tecken i ditt program med dess kod måste du skriva \u+ koden i hexadecimal . Till exempel,\u00A9

Koda Konsolutgång
System.out.println("\u00A9 CodeGym");
© CodeGym


5. Unicode: kodpunkt

"640 kilobyte borde räcka för alla! Eller inte". (Citat tillskrivet Bill Gates)

Livet är grovt, och med tiden började UTF-16-kodningen vara otillräcklig. Det visar sig att det finns många asiatiska språk, och de har många glyfer. Och alla dessa glyfer kan helt enkelt inte stoppas i 2 byte.

Vad kan göras? Använd fler byte !

Men char-typen är bara 2 byte och att ändra den till 4 är inte så lätt: miljarder rader Java-kod har skrivits över hela världen, vilket skulle gå sönder om char-typen plötsligt blir 4 byte en Java-maskin. Så vi kan inte ändra rödingstypen!

Det finns ett annat tillvägagångssätt. Kom ihåg hur vi undkommer karaktärer genom att sätta ett snedstreck framför dem. I grund och botten kodade vi ett enda tecken med flera tecken.

Javas skapare bestämde sig för att använda samma tillvägagångssätt.

Vissa tecken som visuellt visas som ett enda tecken är kodade som två chars i en sträng:

Koda Konsolutgång
System.out.println("\uD83D\uDD0A");
🔊

Nu kan ditt Java-program till och med mata ut emojis till konsolen 😎