CodeGym /Java blog /Tilfældig /Java Escape-karakterer
John Squirrels
Niveau
San Francisco

Java Escape-karakterer

Udgivet i gruppen
Hej! I tidligere lektioner har vi allerede stiftet bekendtskab med tekststrenge, som er repræsenteret af String -klassen i Java. Som du sikkert husker, er en streng en sekvens af tegn. Disse tegn kan være bogstaver, tal, tegnsætningstegn og så videre. Det vigtigste, når du opretter en streng, er, at hele sekvensen skal være omgivet af anførselstegn:

public class Main {
   public static void main(String[] args) {
       String alex = new String ("My name is Alex. I'm 20!");
   }
}
Men hvad gør vi, hvis vi skal lave en streng, der selv skal indeholde anførselstegn? Antag for eksempel, at vi gerne vil fortælle verden om din yndlingsbog:

public class Main {
   public static void main(String[] args) {
       String myFavoriteBook = new String ("My favorite book is "Twilight" by Stephanie Meyer");
   }
}
Det ser ud til, at compileren er utilfreds med noget! Hvad tror du problemet kan være? Og hvad har det med anførselstegn at gøre? Faktisk er det hele meget enkelt. Compileren fortolker anførselstegn på en meget specifik måde, dvs. den forventer, at strenge bliver pakket ind i dem. Og hver gang compileren ser ", forventer den, at anførselstegnet bliver efterfulgt af et andet anførselstegn, og at indholdet mellem dem er teksten i en streng, der skal oprettes af compileren. I vores tilfælde er anførselstegnene ca. ordet "Twilight" er inden for andre anførselstegn . Når compileren når dette stykke tekst, forstår den simpelthen ikke, hvad den forventes at gøre. Anførselstegnet antyder, at en streng skal oprettes. Men det er det, compileren er alleredegør! Her er grunden: ganske enkelt bliver compileren forvirret over, hvad den forventes at gøre. "Et andet anførselstegn? Er det en form for fejl? Jeg er allerede ved at oprette en streng! Eller skal jeg oprette en anden? Argh!...:/" Vi skal fortælle compileren, når et anførselstegn er en kommando ( "opret en streng!"), og når det blot er et tegn ("vis ordet "Twilight" sammen med anførselstegn!"). For at gøre dette bruger Java tegn-escape . Dette opnås ved hjælp af et særligt symbol: \ . Dette symbol kaldes normalt "omvendt skråstreg". I Java kaldes en omvendt skråstreg kombineret med et tegn, der skal "escapes", en kontrolsekvens . For eksempel \"er en kontrolsekvens til visning af anførselstegn på skærmen. Når du støder på denne konstruktion i din kode, vil compileren forstå, at dette kun er et anførselstegn, der skal vises på skærmen. Lad os prøve at ændre vores kode med bogen:

public static void main(String[] args) {
       String myFavoriteBook = new String ("My favorite book is \"Twilight\" by Stephanie Meyer");
       System.out.println(myFavoriteBook);
   }
}
Vi har brugt \ til at undslippe vores to "interne" anførselstegn. Lad os prøve at køre main() metoden... Konsol output:
My favorite book is "Twilight" by Stephanie Meyer
Fremragende! Koden fungerede præcis, som vi ville have den! Anførselstegn er på ingen måde de eneste tegn, vi muligvis skal undslippe. Antag, at vi vil fortælle nogen om vores arbejde:

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);
   }
}
Endnu en fejl! Kan du gætte hvorfor? Endnu en gang forstår compileren ikke, hvad han skal gøre. Når alt kommer til alt, kender compileren ikke \ som andet end en kontrolsekvens ! Den forventer, at omvendt skråstreg bliver efterfulgt af en bestemt karakter, som den på en eller anden måde skal fortolke på en særlig måde (såsom et anførselstegn). Men i dette tilfælde efterfølges \ af almindelige bogstaver. Så compileren er forvirret igen. Hvad skal vi gøre? Nøjagtig det samme som før: vi tilføjer bare endnu en \ til vores \ !

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);

   }
}
Lad os se, hvad vi får: Konsoloutput:
My work files are in D:\Work Projects\java
Super! Compileren bestemmer straks, at \ er almindelige tegn, der skal vises sammen med resten. Java har en hel del kontrolsekvenser. Her er den fulde liste:
  • \t - faneblad.
  • \b - backspace (et skridt tilbage i teksten eller sletning af et enkelt tegn).
  • \n - ny linje.
  • \r - vogn retur. ()
  • \f - form feed.
  • \' enkelt citat.
  • \" dobbelt anførselstegn.
  • \\ omvendt skråstreg.
Så hvis compileren støder på \n i teksten, forstår den, at dette ikke kun er et symbol og et bogstav, der skal vises på konsollen, men snarere en speciel kommando om at "flytte til en ny linje!". Dette kan for eksempel være nyttigt, hvis vi ønsker at vise en del af et digt:

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);
   }
}
Her er, hvad vi får: Konsoloutput:
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...
Lige hvad vi ønskede! Kompileren genkendte flugtsekvensen og udsendte et uddrag af digtet på 4 linjer.

Undslip Unicode-tegn

Et andet vigtigt emne, som du skal kende til i forbindelse med escape-tegn, er Unicode. Unicode er en standard tegnkodning, der inkluderer symboler på næsten alle skriftsprog i verden. Med andre ord er det en liste over specielle koder, der repræsenterer næsten alle tegn på ethvert sprog! Dette er naturligvis en meget lang liste, og ingen lærer den udenad :) Hvis du vil vide, hvor den kom fra, og hvorfor den blev nødvendig, så læs denne informative artikel: https://docs.oracle.com/javase/tutorial/ i18n/text/unicode.html Alle Unicode-tegnkoder har formen " u+<hexadecimalt ciffer>". For eksempel er det velkendte copyright-symbol repræsenteret af u00A9. Så hvis du skal bruge dette tegn, når du arbejder med tekst i Java, kan du undslippe det i din tekst! Vi vil f.eks. for at informere alle om, at CodeGym ejer ophavsretten til denne lektion:

public class Main {
   public static void main(String[] args) {
       System.out.println("\"Escaping characters\", \u00A9 2019 CodeGym");
   }
}
Konsoludgang:
"Escaping characters", © 2019 CodeGym
Super, det hele lykkedes! Men det handler ikke kun om specielle symboler! Du kan bruge Unicode og escape-tegn til at kode tekst skrevet samtidigt på forskellige sprog. Og endda tekst skrevet på flere forskellige dialekter af samme sprog!

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");
   }
}
Konsoludgang:
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 dette eksempel brugte vi tegnkoder til at bygge en streng bestående af engelske og tre(!) forskellige typer kinesiske tegn - traditionelle, forenklede og latinske (pinyin). Og det opsummerer det omtrent! Nu ved du nok om at undslippe karakterer til at bruge dette fantastiske værktøj i dit arbejde :) For at styrke det, du har lært, foreslår vi, at du ser en videolektion fra vores Java-kursus

Mere læsning:

Kommentarer
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION