CodeGym /Java blogg /Slumpmässig /Java Escape-tecken
John Squirrels
Nivå
San Francisco

Java Escape-tecken

Publicerad i gruppen
Hej! I tidigare lektioner har vi redan bekantat oss med textsträngar, som representeras av klassen String i Java. Som du säkert minns är en sträng en sekvens av tecken. Dessa tecken kan vara alla bokstäver, siffror, skiljetecken och så vidare. Det viktigaste när du skapar en sträng är att hela sekvensen måste omges av citattecken:

public class Main {
   public static void main(String[] args) {
       String alex = new String ("My name is Alex. I'm 20!");
   }
}
Men vad gör vi om vi behöver skapa en sträng som i sig måste innehålla citattecken? Anta till exempel att vi vill berätta för världen om din favoritbok:

public class Main {
   public static void main(String[] args) {
       String myFavoriteBook = new String ("My favorite book is "Twilight" by Stephanie Meyer");
   }
}
Det verkar som om kompilatorn är missnöjd med något! Vad tror du att problemet kan vara? Och vad har det med citattecken att göra? Faktum är att det hela är väldigt enkelt. Kompilatorn tolkar citattecken på ett mycket specifikt sätt, dvs den förväntar sig att strängar ska vara inslagna i dem. Och varje gång kompilatorn ser ", förväntar den sig att citattecknet kommer att följas av ett andra citattecken, och att innehållet mellan dem är texten i en sträng som ska skapas av kompilatorn. I vårt fall är citattecken runt omkring ordet "Twilight" finns inom andra citattecken . När kompilatorn når den här texten förstår den helt enkelt inte vad den förväntas göra. Citattecknet antyder att en sträng måste skapas. Men det är vad kompilatorn är redangör! Här är varför: helt enkelt, kompilatorn blir förvirrad över vad den förväntas göra. "Ett annat citattecken? Är detta något slags misstag? Jag skapar redan en sträng! Eller ska jag skapa en till? Argh!...:/" Vi måste meddela kompilatorn när ett citattecken är ett kommando ( "skapa en sträng!") och när det bara är ett tecken ("visa ordet "Twilight" tillsammans med citattecken!"). För att göra detta använder Java teckenutlösning . Detta görs med hjälp av en speciell symbol: \ . Denna symbol kallas normalt "omvänt snedstreck". I Java kallas ett omvänt snedstreck i kombination med ett tecken som ska "escapes" en kontrollsekvens . Till exempel \"är en kontrollsekvens för att visa citattecken på skärmen. När kompilatorn stöter på denna konstruktion i din kod kommer kompilatorn att förstå att detta bara är ett citattecken som ska visas på skärmen. Låt oss försöka ändra vår kod med boken:

public static void main(String[] args) {
       String myFavoriteBook = new String ("My favorite book is \"Twilight\" by Stephanie Meyer");
       System.out.println(myFavoriteBook);
   }
}
Vi har använt \ för att undvika våra två "inre" citattecken. Låt oss försöka köra metoden main() ... Konsolutdata:
My favorite book is "Twilight" by Stephanie Meyer
Excellent! Koden fungerade precis som vi ville ha den! Citattecken är inte på något sätt de enda tecken vi kan behöva för att undkomma. Anta att vi vill berätta för någon om vårt arbete:

public class Main {
   public static void main(String[] args) {
       String workFiles= new String ("My work files are in D:\Work Projects\java");
       System.out.println(workFiles);
   }
}
Ännu ett fel! Kan du gissa varför? Återigen förstår inte kompilatorn vad den ska göra. När allt kommer omkring känner kompilatorn inte \ som något annat än en kontrollsekvens ! Den förväntar sig att snedstrecket följs av ett visst tecken som det på något sätt måste tolka på ett speciellt sätt (som ett citattecken). Men i det här fallet följs \ av vanliga bokstäver. Så kompilatorn är förvirrad igen. Vad ska vi göra? Exakt samma sak som tidigare: vi lägger bara till ytterligare en \ till vår \ !

public class Main {

   public static void main(String[] args) {

       String workFiles= new String ("My work files are in D:\\Work Projects\\java");
       System.out.println(workFiles);

   }
}
Låt oss se vad vi får: Konsolutgång:
My work files are in D:\Work Projects\java
Super! Kompilatorn bestämmer omedelbart att \ är vanliga tecken som ska visas tillsammans med resten. Java har ganska många kontrollsekvenser. Här är hela listan:
  • \t - tab.
  • \b - backsteg (ett steg bakåt i texten eller radering av ett enstaka tecken).
  • \n - ny rad.
  • \r - vagnretur. ()
  • \f - formulärflöde.
  • \' enda citat.
  • \" dubbla citattecken.
  • \\ omvänt snedstreck.
Således, om kompilatorn stöter på \n i texten, förstår den att detta inte bara är en symbol och en bokstav som ska visas på konsolen, utan snarare ett speciellt kommando för att "flytta till en ny rad!". Detta kan till exempel vara användbart om vi vill visa en del av en dikt:

public class Main {
   public static void main(String[] args) {
       String byron = new String ("She walks in beauty, like the night, \nOf cloudless climes and starry skies\nAnd all that's best of dark and bright\nMeet in her aspect and her eyes...");
       System.out.println(byron);
   }
}
Här är vad vi får: Konsolutgång:
She walks in beauty, like the night, 
Of cloudless climes and starry skies 
And all that's best of dark and bright 
Meet in her aspect and her eyes...
Precis vad vi ville ha! Kompilatorn kände igen flyktsekvensen och matade ut ett utdrag av dikten på 4 rader.

Escape Unicode-tecken

Ett annat viktigt ämne som du behöver veta om i samband med escape-tecken är Unicode. Unicode är en standardteckenkodning som innehåller symbolerna för nästan alla skrivna språk i världen. Med andra ord, det är en lista med specialkoder som representerar nästan varje tecken på alla språk! Naturligtvis är det här en väldigt lång lista och ingen lär sig den utantill :) Om du vill veta var den kom ifrån och varför den blev nödvändig, läs denna informativa artikel: https://docs.oracle.com/javase/tutorial/ i18n/text/unicode.html Alla Unicode-teckenkoder har formen " u+<hexadecimal siffra>". Till exempel representeras den välkända copyright-symbolen av u00A9. Så om du behöver använda det här tecknet när du arbetar med text i Java kan du escape det i din text! Vi vill till exempel för att informera alla om att CodeGym äger upphovsrätten till denna lektion:

public class Main {
   public static void main(String[] args) {
       System.out.println("\"Escaping characters\", \u00A9 2019 CodeGym");
   }
}
Konsolutgång:
"Escaping characters", © 2019 CodeGym
Bra, allt löste sig! Men det handlar inte bara om speciella symboler! Du kan använda Unicode och escape-tecken för att koda text skriven samtidigt på olika språk. Och även text skriven på flera olika dialekter på samma språk!

public class Main {
   public static void main(String[] args) {

       System.out.println("\u004d\u0061\u006f \u005a\u0065\u0064\u006f\u006e\u0067 " + 

               "\u0028\u0054\u0072\u0061\u0064\u0069\u0074\u0069\u006f\u006e\u0061\u006c " +

               "\u0043\u0068\u0069\u006e\u0065\u0073\u0065\u003a \u6bdb\u6fa4\u6771\u002c " +

               "\u0053\u0069\u006d\u0070\u006c\u0069\u0066\u0069\u0065\u0064 " +

               "\u0043\u0068\u0069\u006e\u0065\u0073\u0065\u003a \u6bdb\u6cfd\u4e1c\u002c " +

               "\u0050\u0069\u006e\u0079\u0069\u006e\u003a \u004d\u00e1\u006f " +

               "\u005a\u00e9\u0064\u014d\u006e\u0067\u0029 \u0077\u0061\u0073 \u0061 " +

               "\u0032\u0030\u0074\u0068\u002d\u0063\u0065\u006e\u0074\u0075\u0072\u0079 " +

               "\u0043\u0068\u0069\u006e\u0065\u0073\u0065 " +

                "\u0073\u0074\u0061\u0074\u0065\u0073\u006d\u0061\u006e\u002c " +

               "\u0070\u006f\u006c\u0069\u0074\u0069\u0063\u0069\u0061\u006e\u002c " +

               "\u0061\u006e\u0064 \u0074\u0068\u0065 \u0063\u0068\u0069\u0065\u0066 " +

               "\u0074\u0068\u0065\u006f\u0072\u0065\u0074\u0069\u0063\u0069\u0061\u006e " +

               "\u006f\u0066 \u004d\u0061\u006f\u0069\u0073\u006d\u002e");
   }
}
Konsolutgång:
Mao Zedong (Traditional Chinese: 毛澤東, Simplified Chinese: 毛泽东, Pinyin: Máo Zédōng) was a 20th-century Chinese statesman, politician, and the chief theoretician of Maoism.
I det här exemplet använde vi teckenkoder för att bygga en sträng bestående av engelska och tre(!) olika typer av kinesiska tecken — traditionella, förenklade och latinska (pinyin). Och det sammanfattar det ungefär! Nu vet du tillräckligt om flyktiga karaktärer för att använda detta fantastiska verktyg i ditt arbete :) För att förstärka det du lärde dig föreslår vi att du tittar på en videolektion från vår Java-kurs
Kommentarer
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION