CodeGym /Java-Blog /Germany /Escape-Zeichen in Java
Autor
Vasyl Malik
Senior Java Developer at CodeGym

Escape-Zeichen in Java

Veröffentlicht in der Gruppe Germany
Hallo! In den vorangegangenen Lektionen haben wir uns bereits mit Text in Form von Zeichenketten vertraut gemacht, die in Java durch die Klasse String repräsentiert werden. Wie du dich wahrscheinlich erinnerst, ist eine Zeichenkette eine Folge von Zeichen. Escape-Zeichen in Java - 1Diese Zeichen können beliebige Buchstaben, Ziffern, Satzzeichen und so weiter sein. Das Wichtigste beim Erstellen einer Zeichenkette ist, dass die gesamte Folge in Anführungszeichen eingeschlossen sein muss:

public class Main {
   public static void main(String[] args) {
       String alex = new String ("My name is Alex. I'm 20!");
   }
}
Aber was tun wir, wenn wir eine Zeichenkette erstellen müssen, die selbst Anführungszeichen enthalten soll? Nehmen wir zum Beispiel an, wir wollen der Welt von deinem Lieblingsbuch erzählen:

public class Main {
   public static void main(String[] args) {
       String myFavoriteBook = new String ("My favorite book is "Twilight" by Stephanie Meyer");
   }
}
Es scheint, als sei der Compiler mit etwas unzufrieden! Was denkst du, könnte das Problem sein? Und was hat das mit Anführungszeichen zu tun? Im Grunde ist alles ganz einfach. Der Compiler interpretiert Anführungszeichen auf eine ganz bestimmte Art und Weise, d. h. er erwartet, dass Zeichenketten von ihnen umschlossen werden. Und jedes Mal, wenn der Compiler ein " sieht, erwartet er, dass auf das Anführungszeichen ein zweites Anführungszeichen folgt und dass der Inhalt dazwischen der Text eines Strings ist, der vom Compiler erstellt wird. In unserem Fall stehen die Anführungszeichen um das Wort "Twilight" innerhalb anderer Anführungszeichen. Wenn der Compiler diesen Teil des Textes erreicht, versteht er einfach nicht, was von ihm erwartet wird. Das Anführungszeichen deutet an, dass eine Zeichenkette erstellt werden muss. Aber genau das macht der Compiler bereits ! Der Compiler weiß einfach nicht, was er nun tun soll. „Noch ein Anführungszeichen? Handelt es sich um einen Fehler? Ich bin doch schon dabei, einen String zu erstellen! Oder soll ich einen neuen anlegen? Argh!...:/“ Wir müssen dem Compiler mitteilen, wann ein Anführungszeichen ein Befehl ist („Erstelle einen String!“) und wann es einfach ein Zeichen ist („Zeige das Wort "Twilight" zusammen mit Anführungszeichen an!“). Um dies zu erreichen, verwendet Java Escape-Zeichen. Diese Escape-Zeichen verwenden ein spezielles Symbol: \. Dieses Symbol wird normalerweise „Backslash“ genannt. In Java wird ein Backslash in Kombination mit einem Zeichen, das „escaped“ werden soll, als Steuersequenz bezeichnet. \" ist zum Beispiel eine Steuersequenz für die Anzeige von Anführungszeichen auf dem Bildschirm. Wenn er dieses Konstrukt in deinem Code entdeckt, weiß der Compiler, dass dies nur ein Anführungszeichen ist, das auf dem Bildschirm angezeigt werden soll. Lass uns versuchen, unseren Code mit dem Buch zu ändern:

public static void main(String[] args) {
       String myFavoriteBook = new String ("My favorite book is \"Twilight\" by Stephanie Meyer");
       System.out.println(myFavoriteBook);
   }
}
Wir haben \ benutzt, um unsere beiden „inneren“ Anführungszeichen zu escapen. Versuchen wir, die main()-Methode auszuführen... Konsolenausgabe:
My favorite book is "Twilight" by Stephanie Meyer
Hervorragend! Der Code hat genau so funktioniert, wie wir es wollten! Anführungszeichen sind bei weitem nicht die einzigen Zeichen, die wir escapen müssen. Angenommen, wir wollen jemandem von unserer Arbeit erzählen:

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);
   }
}
Wieder ein Fehler! Kannst du erraten, warum? Wieder einmal versteht der Compiler nicht, was er tun soll. Schließlich kennt der Compiler \ als nichts anderes als eine Steuersequenz! Er erwartet, dass auf den Backslash ein bestimmtes Zeichen folgt, das er auf eine besondere Weise interpretieren muss (z. B. ein Anführungszeichen). Aber in diesem Fall folgen auf \ ganz gewöhnliche Buchstaben. Der Compiler ist also wieder verwirrt. Was sollen wir tun? Es ist genau dasselbe wie vorher: Wir fügen einfach ein weiteres \ zu unserem \ hinzu!

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

   }
}
Sehen wir uns das Ergebnis an: Konsolenausgabe:
My work files are in D:\Work Projects\java
Super! Der Compiler stellt sofort fest, dass es sich bei den \ um normale Zeichen handelt, die zusammen mit dem Rest angezeigt werden sollen. Java hat eine ganze Reihe von Steuersequenzen. Hier ist die vollständige Liste:
  • \t — Tabulator.
  • \b — Backspace (ein Schritt rückwärts im Text oder das Löschen eines einzelnen Zeichens).
  • \n — neue Zeile.
  • \r — Wagenrücklauf. ()
  • \f — Seitenvorschub.
  • \' — einfaches Anführungszeichen.
  • \" — Anführungszeichen.
  • \\ — Backslash.
Wenn der Compiler also auf \n im Text stößt, versteht er, dass es sich dabei nicht nur um ein Symbol und einen Buchstaben handelt, die auf der Konsole angezeigt werden sollen, sondern um einen speziellen Befehl, um „in eine neue Zeile zu springen“. Das kann zum Beispiel nützlich sein, wenn wir einen Teil eines Gedichts anzeigen wollen:

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);
   }
}
Und das ist das Ergebnis: Konsolenausgabe:
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...
Genau das, was wir wollten! Der Compiler hat die Escape-Sequenz erkannt und einen Auszug des Gedichts auf 4 Zeilen ausgegeben.

Escape-Zeichen Unicode

Ein weiteres wichtiges Thema, das du im Zusammenhang mit Escape-Zeichen kennen musst, ist Unicode. Unicode ist eine Standardzeichenkodierung, die die Symbole fast aller Schriftsprachen der Welt enthält. Mit anderen Worten: Es ist eine Liste von speziellen Codes, die fast jedes Zeichen in jeder Sprache darstellen können! Natürlich ist diese Liste sehr lang und niemand lernt sie auswendig :) Wenn du wissen willst, woher sie kommt und warum sie notwendig wurde, lies am besten diesen informativen Artikel. Alle Unicode-Zeichencodes haben die Form „u+<hexadezimale Ziffer>“. Das bekannte Copyright-Symbol wird zum Beispiel durch u00A9 dargestellt. Wenn du also dieses Zeichen bei der Arbeit mit Text in Java verwenden musst, kannst du es in deinem Text escapen! Wir möchten zum Beispiel alle darüber informieren, dass CodeGym das Urheberrecht an dieser Lektion besitzt:

public class Main {
   public static void main(String[] args) {
       System.out.println("\"Escaping characters\", \u00A9 2019 CodeGym");
   }
}
Konsolenausgabe:
"Escaping characters", © 2019 CodeGym
Toll, es hat alles geklappt! Aber es geht nicht nur um besondere Symbole! Du kannst Unicode und Escape-Zeichen verwenden, um Text zu kodieren, der gleichzeitig in verschiedenen Sprachen geschrieben ist. Und sogar Texte, die in mehreren verschiedenen Dialekten derselben Sprache geschrieben sind!

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");
   }
}
Konsolenausgabe:
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.
In diesem Beispiel haben wir Zeichencodes verwendet, um eine Zeichenkette zu erstellen, die aus englischen und drei (!) verschiedenen Arten von chinesischen Zeichen besteht – traditionell, vereinfacht und lateinisch (Pinyin). Und das wär's dann auch! Jetzt weißt du genug über Escape-Zeichen, um dieses großartige Werkzeug selbst bei deiner Arbeit einzusetzen :) Escape-Zeichen in Java - 2
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION