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 ("Mein Name ist Alex. Ich bin 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 ("Mein Lieblingsbuch ist "Twilight" von 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 ("Mein Lieblingsbuch ist \"Twilight\" von 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:
Mein Lieblingsbuch ist "Twilight" von 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 ("Meine Arbeitsdateien befinden sich in D:\Arbeitsprojekte\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 ("Meine Arbeitsdateien befinden sich in D:\\Arbeitsprojekte\\java");
       System.out.println(workFiles);

   }
}
Sehen wir uns das Ergebnis an: Konsolenausgabe:
Meine Arbeitsdateien befinden sich in D:\Arbeitsprojekte\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 goethe = new String ("Wer reitet so spät durch Nacht und Wind? \nEs ist der Vater mit seinem Kind; \nEr hat den Knaben wohl in dem Arm, \nEr fasst ihn sicher, er hält ihn warm...");
       System.out.println(goethe);
   }
}
Und das ist das Ergebnis: Konsolenausgabe:
Wer reitet so spät durch Nacht und Wind? Es ist der Vater mit seinem Kind; Er hat den Knaben wohl in dem Arm, Er fasst ihn sicher, er hält ihn warm...
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("\"Escape-Zeichen\", \u00A9 2019 CodeGym");
   }
}
Konsolenausgabe:
"Escape-Zeichen", © 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 (Traditionelles Chinesisch: 毛澤東, Vereinfachtes Chinesisch: 毛泽东, Pinyin: Máo Zédōng) war ein chinesischer Staatsmann, Politiker und der führende Theoretiker des Maoismus im 20. Jahrhundert.
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