CodeGym /Java-blogg /Tilfeldig /Java Escape-karakterer
John Squirrels
Nivå
San Francisco

Java Escape-karakterer

Publisert i gruppen
Hei! I tidligere leksjoner har vi allerede blitt kjent med tekststrenger, som er representert av String -klassen i Java. Som du sikkert husker, er en streng en sekvens av tegn. Disse tegnene kan være alle bokstaver, tall, skilletegn og så videre. Det viktigste når du lager en streng er at hele sekvensen må være omgitt av anførselstegn:

public class Main {
   public static void main(String[] args) {
       String alex = new String ("My name is Alex. I'm 20!");
   }
}
Men hva gjør vi hvis vi trenger å lage en streng som i seg selv må inneholde anførselstegn? Anta for eksempel at vi ønsker å fortelle verden om favorittboken din:

public class Main {
   public static void main(String[] args) {
       String myFavoriteBook = new String ("My favorite book is "Twilight" by Stephanie Meyer");
   }
}
Det ser ut til at kompilatoren er misfornøyd med noe! Hva tror du problemet kan være? Og hva har det med anførselstegn å gjøre? Faktisk er det hele veldig enkelt. Kompilatoren tolker anførselstegn på en veldig spesifikk måte, dvs. at den forventer at strenger blir pakket inn i dem. Og hver gang kompilatoren ser ", forventer den at anførselstegnet vil bli fulgt av et andre anførselstegn, og at innholdet mellom dem er teksten til en streng som skal lages av kompilatoren. I vårt tilfelle er anførselstegnene ca. ordet "Twilight" er innenfor andre anførselstegn . Når kompilatoren når denne teksten, forstår den rett og slett ikke hva den forventes å gjøre. Anførselstegnet antyder at en streng må opprettes. Men det er det kompilatoren er allerededriver med! Her er grunnen: ganske enkelt blir kompilatoren forvirret over hva den forventes å gjøre. "Et annet anførselstegn? Er dette en slags feil? Jeg lager allerede en streng! Eller bør jeg lage en annen? Argh!...:/" Vi må gi kompilatoren beskjed når et anførselstegn er en kommando ( "lag en streng!") og når det bare er et tegn ("vis ordet "Twilight" sammen med anførselstegn!"). For å gjøre dette bruker Java tegnutkobling . Dette gjøres ved å bruke et spesielt symbol: \ . Dette symbolet kalles vanligvis "omvendt skråstrek". I Java kalles en omvendt skråstrek kombinert med et tegn som skal "escapes" en kontrollsekvens . For eksempel, \"er en kontrollsekvens for å vise anførselstegn på skjermen. Når du møter denne konstruksjonen i koden din, vil kompilatoren forstå at dette bare er et anførselstegn som skal vises på skjermen. La oss prøve å endre koden vår 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 brukt \ for å unnslippe våre to "interne" anførselstegn. La oss prøve å kjøre main() -metoden... Konsollutgang:
My favorite book is "Twilight" by Stephanie Meyer
Utmerket! Koden fungerte akkurat slik vi ville ha den! Anførselstegn er på ingen måte de eneste tegnene vi trenger for å unnslippe. Tenk deg at vi ønsker å fortelle noen om arbeidet vårt:

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);
   }
}
Nok en feil! Kan du gjette hvorfor? Nok en gang forstår ikke kompilatoren hva den skal gjøre. Tross alt vet ikke kompilatoren \ som noe annet enn en kontrollsekvens ! Den forventer at omvendt skråstrek blir fulgt av et bestemt tegn som det på en eller annen måte må tolke på en spesiell måte (som et anførselstegn). Men i dette tilfellet etterfølges \ av vanlige bokstaver. Så kompilatoren er forvirret igjen. Hva skal vi gjøre? Nøyaktig det samme som før: vi legger bare til en annen \ til 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);

   }
}
La oss se hva vi får: Konsollutgang:
My work files are in D:\Work Projects\java
Super! Kompilatoren bestemmer umiddelbart at \ er vanlige tegn som skal vises sammen med resten. Java har ganske mange kontrollsekvenser. Her er hele listen:
  • \t - tab.
  • \b - backspace (et skritt tilbake i teksten eller sletting av et enkelt tegn).
  • \n - ny linje.
  • \r - vognretur. ()
  • \f - form feed.
  • Enkelt sitat.
  • \" dobbelt anførselstegn.
  • \\ omvendt skråstrek.
Derfor, hvis kompilatoren støter på \n i teksten, forstår den at dette ikke bare er et symbol og en bokstav som skal vises på konsollen, men heller en spesiell kommando for å "flytte til en ny linje!". Dette kan for eksempel være nyttig hvis vi ønsker å vise en del av et 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);
   }
}
Her er hva vi får: Konsollutgang:
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...
Akkurat det vi ønsket! Kompilatoren gjenkjente rømningssekvensen og ga ut et utdrag av diktet på 4 linjer.

Escape Unicode-tegn

Et annet viktig tema som du trenger å vite om i forbindelse med escape-tegn er Unicode. Unicode er en standard tegnkoding som inkluderer symbolene til nesten alle skriftspråk i verden. Med andre ord, det er en liste over spesialkoder som representerer nesten alle tegn på alle språk! Naturligvis er dette en veldig lang liste og ingen lærer den utenat :) Hvis du vil vite hvor den kom fra og hvorfor den ble nødvendig, les denne informative artikkelen: https://docs.oracle.com/javase/tutorial/ i18n/text/unicode.html Alle Unicode-tegnkoder har formen " u+<heksadesimalt siffer>". For eksempel er det velkjente copyright-symbolet representert av u00A9. Så hvis du trenger å bruke dette tegnet når du arbeider med tekst i Java, kan du unnslippe det i teksten din! Vi vil for eksempel å informere alle om at CodeGym eier opphavsretten til denne leksjonen:

public class Main {
   public static void main(String[] args) {
       System.out.println("\"Escaping characters\", \u00A9 2019 CodeGym");
   }
}
Konsoll utgang:
"Escaping characters", © 2019 CodeGym
Flott, alt ordnet seg! Men det handler ikke bare om spesielle symboler! Du kan bruke Unicode og escape-tegn for å kode tekst skrevet samtidig på forskjellige språk. Og til og med tekst skrevet på flere forskjellige dialekter av samme 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");
   }
}
Konsoll utgang:
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 eksemplet brukte vi tegnkoder for å bygge en streng bestående av engelsk og tre(!) forskjellige typer kinesiske tegn - tradisjonelle, forenklede og latinske (pinyin). Og det oppsummerer det omtrent! Nå vet du nok om unnslippende karakterer til å bruke dette flotte verktøyet i arbeidet ditt :) For å forsterke det du har lært, foreslår vi at du ser en videoleksjon fra Java-kurset vårt
Kommentarer
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION