JavaRush /Java-Blog /Random-DE /Fluchtcharaktere

Fluchtcharaktere

Veröffentlicht in der Gruppe Random-DE
Hallo! In früheren Vorlesungen haben wir bereits mit Strings vertraut gemacht, die in Java durch die Klasse repräsentiert werden String. Wie Sie sich wahrscheinlich erinnern, ist eine Zeichenfolge eine Folge von Zeichen. Die Symbole können alles sein – Buchstaben, Zahlen, Satzzeichen und so weiter. Die Hauptsache ist, dass beim Erstellen einer Zeichenfolge die gesamte Sequenz in Anführungszeichen gesetzt wird:
public class Main {
   public static void main(String[] args) {
       String sasha = new String ("Меня зовут Саша, мне 20 лет!");
   }
}
Aber was passiert, wenn wir eine Zeichenfolge erstellen müssen, die auch Anführungszeichen enthält? Wir möchten der Welt zum Beispiel von unserem Lieblingsbuch erzählen:
public class Main {
   public static void main(String[] args) {
       String myFavoriteBook = new String ("Моя любимая книга - "Сумерки" Стефани Майер");
   }
}
Der Compiler scheint mit etwas unzufrieden zu sein! Was könnte Ihrer Meinung nach die Ursache für den Fehler sein und warum ist er speziell bei Anführungszeichen aufgetreten? Tatsache ist, dass der Compiler Anführungszeichen auf eine streng definierte Weise wahrnimmt, nämlich einen String darin einschließt. Und jedes Mal, wenn er ein Zeichen sieht ", erwartet er, dass ihm dasselbe Zeichen folgt und dazwischen der Text der Zeile steht, die er, der Compiler, erstellen muss. In unserem Fall stehen die Anführungszeichen um das Wort „Twilight“ innerhalb anderer Anführungszeichen . Und wenn der Compiler zu diesem Text kommt, versteht er einfach nicht, was er davon will. Es scheint, als gäbe es ein Anführungszeichen, was bedeutet, dass eine Zeichenfolge erstellt werden sollte. Aber er tut es bereits! Genau das ist der Grund. Einfach ausgedrückt: An diesem Punkt versteht der Compiler falsch, was er von ihm will. "Noch ein Zitat? Ist das ein Fehler? Ich erstelle bereits einen String! Oder soll ich noch einen erstellen? Errr...:/" Wir müssen dem Compiler erklären, wann ein Zitat ein Befehl dafür ist (" Erstellen Sie eine Zeichenfolge!“) und wenn es sich um ein einfaches Symbol handelt („Zeigen Sie das Wort „Twilight“ zusammen mit Anführungszeichen an!“). Um dies zu erreichen, verwendet Java Zeichen-Escapezeichen . Dies geschieht über ein Sonderzeichen. So was: \. Im normalen Leben wird es „Backslash“ genannt, aber in Java wird es (in Kombination mit dem zu maskierenden Zeichen) Escape-Sequenz genannt . Hier ist es zum Beispiel \"eine Steuersequenz zum Anzeigen von Kursen auf dem Bildschirm. Wenn der Compiler in Ihrem Code auf eine solche Konstruktion stößt, erkennt er, dass es sich lediglich um ein „Anführungszeichen“ handelt, das auf dem Bildschirm angezeigt werden muss. Versuchen wir, unseren Code mit dem Buch zu ändern:
public static void main(String[] args) {
       String myFavoriteBook = new String ("Моя любимая книга - \"Сумерки\" Стефани Майер");
       System.out.println(myFavoriteBook);
   }
}
Wir haben die beiden „inneren“ Anführungszeichen mit einem maskiert \. Versuchen wir, die Methode auszuführen main()... Konsolenausgabe:

Моя любимая книга - "Сумерки" Стефани Майер
Großartig, der Code hat genau nach Bedarf funktioniert! Zitate sind bei weitem nicht der einzige Fall, in dem wir Zeichen-Escapezeichen benötigen. Wir wollten zum Beispiel jemandem von unserer Arbeit erzählen:
public class Main {
   public static void main(String[] args) {
       String workFiles= new String ("Мои рабочие файлы лежат в папке D:\Work Projects\java");
       System.out.println(workFiles);
   }
}
Und wieder ein Fehler! Können Sie schon erraten, was der Grund ist? Der Compiler versteht wieder nicht, was er tun soll. Schließlich \ist ein Symbol für ihn nichts anderes als eine Kontrollsequenz ! Es wird erwartet, dass nach dem Schrägstrich ein Zeichen steht, das auf besondere Weise interpretiert werden muss (z. B. ein Anführungszeichen). Allerdings \folgen hier die regulären Buchstaben. Der Compiler ist also wieder verwirrt. Was zu tun ist? Genau das Gleiche wie beim letzten Mal: ​​Fügen Sie einfach \noch eines zu unserem hinzu \!
public class Main {

   public static void main(String[] args) {

       String workFiles= new String ("Мои рабочие файлы лежат в папке D:\\Work Projects\\java");
       System.out.println(workFiles);

   }
}
Mal sehen, was dabei herauskommt: Konsolenausgabe:

Мои рабочие файлы лежат в папке D:\Work Projects\java
Super! Der Compiler stellte sofort fest, dass es sich hierbei um \gewöhnliche Symbole handelte, die zusammen mit dem Rest auf der Konsole ausgegeben werden mussten. In Java gibt es eine ganze Reihe von Escape-Sequenzen. Hier ist ihre vollständige Liste:
  • \t Tabulatorzeichen.
  • \b ein Rücksprungzeichen im Text einen Schritt zurück oder das Löschen eines Zeichens in einer Zeile (Rücktaste).
  • \n Newline-Zeichen.
  • \r Wagenrücklaufzeichen.
  • \f Seitenlauf.
  • \' einfaches Anführungszeichen.
  • \" doppeltes Anführungszeichen.
  • \\Backslash-Zeichen (\).
Wenn der Compiler also auf ein Symbol im Text stößt \n, erkennt er, dass es sich nicht nur um ein Symbol und einen Buchstaben handelt, die an die Konsole ausgegeben werden müssen, sondern um einen speziellen Befehl dafür – „Zeilenumbruch machen!“ Dies kann beispielsweise für uns nützlich sein, wenn wir einen Teil eines Gedichts auf der Konsole ausgeben möchten:
public class Main {
   public static void main(String[] args) {
       String borodino = new String ("Скажи-ка, дядя, \nВедь не даром \nМосква, спаленная пожаром, \nФранцузу отдана?");
       System.out.println(borodino);
   }
}
Und das haben wir bekommen: Konsolenausgabe:

Скажи-ка, дядя, 
Ведь не даром 
Москва, спаленная пожаром, 
Французу отдана?
Genau das, was benötigt wird! Der Compiler erkannte die Escape-Sequenz und gab einen Vers in 4 Zeilen aus.

Unicode

Ein weiteres wichtiges Thema, über das Sie im Zusammenhang mit der Zeichen-Escape-Funktion Bescheid wissen müssen, ist Unicode . Unicode ist ein Zeichenkodierungsstandard, der Zeichen aus fast allen Schriftsprachen der Welt umfasst. Mit anderen Worten handelt es sich um eine Liste spezieller Codes, in der es für fast jedes Zeichen aus jeder Sprache einen Code gibt! Natürlich ist diese Liste sehr umfangreich und niemand lernt sie auswendig :) Wenn Sie wissen möchten, woher sie kommt und warum sie benötigt wird, lesen Sie den informativen Artikel über Habrahabr . Alle Zeichencodes in Unicode sind „Buchstabe u+ Hexadezimalziffer“. Das berühmte Copyright-Symbol wird beispielsweise durch den Code u00A9 gekennzeichnet . Wenn Sie dieses Zeichen also beim Arbeiten mit Text in Java verwenden müssen, können Sie es in Ihrem Text maskieren! Beispielsweise möchten wir alle darüber informieren, dass dieser Vortrag dem Urheberrecht von JavaRush unterliegt:
public class Main {
   public static void main(String[] args) {
       System.out.println("Лекция \"Экранирование символов\", \u00A9 2018 Javarush");
   }
}
Konsolenausgabe:

Лекция "Экранирование символов", © 2018 Javarush
Super, alles hat geklappt! Aber Sonderzeichen sind nicht alles! Mithilfe von Unicode und Zeichen-Escape können Sie in verschiedenen Sprachen geschriebene Texte gleichzeitig kodieren. Und das sogar in mehreren verschiedenen Dialekten derselben Sprache!
public class Main {
   public static void main(String[] args) {

       System.out.println("\u041c\u0430\u0301\u043e " +
               "\u0426\u0437\u044d\u0434\u0443\u0301\u043d " +
               "\u0028\u043a\u0438\u0442\u002e \u0442\u0440\u0430\u0434\u002e " +
               "\u6bdb\u6fa4\u6771\u002c \u0443\u043f\u0440\u002e " +
               "\u6bdb\u6cfd\u4e1c\u002c \u043f\u0438\u043d\u044c\u0438\u043d\u044c\u003a " +
               "\u004d\u00e1\u006f \u005a\u00e9\u0064\u014d\u006e\u0067\u0029 " +
               "\u2014 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0439 " +
               "\u0433\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 " +
               "\u0438 \u043f\u043e\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 " +
               "\u0434\u0435\u044f\u0442\u0435\u043b\u044c \u0058\u0058 \u0432\u0435\u043a\u0430\u002c " +
               "\u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u043a " +
               "\u043c\u0430\u043e\u0438\u0437\u043c\u0430\u002e");
   }
}
Konsolenausgabe:

Ма́о Цзэду́н (кит. трад. 毛澤東, упр. 毛泽东, пиньинь: Máo Zédōng) — китайский государственный и политический деятель XX века, главный теоретик маоизма.
In diesem Beispiel haben wir mit Kenntnis der Zeichencodes eine Zeichenfolge geschrieben, die aus dem kyrillischen Alphabet und drei (!) verschiedenen Schreibweisen chinesischer Schriftzeichen besteht – klassische, vereinfachte und lateinische Schriftzeichen (Pinyin). Das ist es im Grunde! Jetzt wissen Sie genug über Zeichen-Escape, um dieses Tool in Ihrer Arbeit zu verwenden :) Wenn nicht alles ganz klar ist, empfehle ich Ihnen, diesen Artikel zu lesen : Er wird eine gute Ergänzung sein.
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION