1. Gründe für das Entkommen von Zeichen

Sie haben einmal gelernt, dass Sie zum Schreiben einer Zeichenfolge im Code diese in doppelte Anführungszeichen setzen müssen. Das Ergebnis ist ein String-Literal .

Aber was machen wir, wenn wir Anführungszeichen innerhalb eines String-Literals benötigen? Eine Zeichenfolge mit Anführungszeichen – was könnte einfacher sein?

Nehmen wir an, wir möchten den Text anzeigen "Friends" was nominated for an "Oscar". Wie machst du das?

Code Anmerkungen
String s = ""Friends" was nominated for an "Oscar"";
Diese Option funktioniert nicht!

Das Problem besteht darin, dass der Compiler denkt, dass Sie völlig unerwarteten Code schreiben:

Code Anmerkungen
String s = ""Friends" was nominated for an "Oscar"";
Diese Option funktioniert nicht!

Nachdem der Compiler im Code auf doppelte Anführungszeichen stößt, behandelt er das Folgende als Anfang eines Zeichenfolgenliterals. Das nächste doppelte Anführungszeichen gibt das Ende des Zeichenfolgenliterals an.

Wie schreibt man also doppelte Anführungszeichen innerhalb eines Literals?


2. Escapezeichen

Da ist ein Weg. Man nennt es Escape-Zeichen . Sie schreiben einfach die Anführungszeichen in die Textzeichenfolge. Und vor den Anführungszeichen fügen Sie das Symbol \( Backslash ) hinzu.

So sieht das String-Literal aus, wenn es richtig geschrieben ist:

Code Anmerkungen
String s = "\"Friends\" was nominated for an \"Oscar\"";
Das wird funktionieren!

Der Compiler interpretiert alles richtig und betrachtet das Anführungszeichen nach dem Backslash nicht als normales Anführungszeichen.

Wenn Sie diese Zeichenfolge außerdem auf dem Bildschirm ausgeben, werden die Anführungszeichen mit Backslashes korrekt verarbeitet und der Text wird ohne Backslashes angezeigt:"Friends" was nominated for an "Oscar"

Ein weiterer wichtiger Punkt. Ein Anführungszeichen, dem ein Backslash vorangestellt ist, stellt ein einzelnes Zeichen dar: Wir verwenden lediglich eine raffinierte Notation, die die Fähigkeit des Compilers, Zeichenfolgenliterale in unserem Code zu erkennen, nicht beeinträchtigt. Sie können einer charVariablen Anführungszeichen zuweisen:

Code Anmerkungen
char c = '\"';
\"ist ein Zeichen, nicht zwei
char c = '"';
Dies ist auch möglich: ein doppeltes Anführungszeichen innerhalb einfacher Anführungszeichen

3. Häufige Situationen, die beim Escapezeichen auftreten

Häufige Situationen, in denen Charaktere entkommen

Neben doppelten Anführungszeichen gibt es viele andere Zeichen, die der Compiler auf besondere Weise behandelt. Zum Beispiel ein Zeilenumbruch.

Wie fügen wir einem Literal einen Zeilenumbruch hinzu? Auch hierfür gibt es eine spezielle Kombination:

\n
Zeilenumbruchzeichen

Wenn Sie einem String-Literal einen Zeilenumbruch hinzufügen müssen, müssen Sie nur ein paar Zeichen hinzufügen: \n.

Beispiel:

Code Konsolenausgabe
System.out.println("Best regards, \n Anonymous");
             
Best regards,
Anonymous

Es gibt insgesamt 8 solcher Sonderkombinationen, die auch Escape-Sequenzen genannt werden . Hier sind sie:

Code Beschreibung
\t Fügen Sie ein Tabulatorzeichen ein
\b Fügen Sie ein Rückschrittzeichen ein
\n Fügen Sie ein Zeilenumbruchzeichen ein
\r Fügen Sie ein Wagenrücklaufzeichen ein
\f Fügen Sie ein Seitenvorschubzeichen ein
\' Fügen Sie ein einfaches Anführungszeichen ein
\" Fügen Sie ein doppeltes Anführungszeichen ein
\\ Fügen Sie einen Backslash ein

Zwei davon kennen Sie, aber was bedeuten die anderen sechs?

\tist ein Tabulatorzeichen

Wenn dieser Text im Text erscheint, entspricht dies dem Drücken der TabTaste während der Eingabe. Es verschiebt den nachfolgenden Text und ermöglicht die Ausrichtung des Textes.

Beispiel:

Code Konsolenausgabe
System.out.println("0\t1\t2\t3");
System.out.println("0\t10\t20\t30");
System.out.println("0\t100\t200\t300");
0       1        2        3
0       10       20       30
0       100      200      300

\bbedeutet „ein Zeichen zurückgehen“

Diese Sequenz in einer Zeichenfolge entspricht dem Drücken der BackspaceTaste auf der Tastatur. Es entfernt das vorangehende Zeichen:

Code Konsolenausgabe
System.out.println("Hello\b\b World");
Hell World!

\rist das Wagenrücklaufzeichen

Dieses Zeichen bewegt den Cursor an den Anfang der aktuellen Zeile, ohne den Text zu ändern. Was auch immer als nächstes angezeigt wird, überschreibt die vorhandene Zeichenfolge.

Beispiel:

Code Konsolenausgabe
System.out.println("Greetings\r World!");
World!

\fist ein Seiten-Feed-Zeichen

Dieses Symbol stammt aus der Zeit der ersten Nadeldrucker. Die Ausgabe dieser Sequenz an einen Drucker würde dazu führen, dass der Drucker einfach das aktuelle Blatt ausgibt, ohne Text zu drucken, bis eine neue Seite beginnt.

Jetzt würden wir es einen Seitenumbruch oder eine neue Seite nennen .

\\ist ein Backslash

Hier ist alles unkompliziert. Wenn wir einen Backslash verwenden, um Zeichen in unserem Text zu maskieren, wie schreiben wir dann das Backslash-Zeichen selbst in die Zeichenfolge?

Es ist ganz einfach: Fügen Sie dem Text einen Backslash hinzu – Sie müssen zwei hintereinander schreiben.

Beispiel:

Code Konsolenausgabe
System.out.println("c:\projects\my\first");
Der Compiler wird Sie bei unbekannten Escape-Zeichen anschreien.
System.out.println("c:\\projects\\my\\first");
So wird es richtig gemacht!


4. Unicode-Kodierung

Wie Sie bereits wissen, entspricht jedes auf dem Bildschirm angezeigte Zeichen einem bestimmten Zahlencode. Ein standardisierter Satz dieser Codes wird als Kodierung bezeichnet .

Es war einmal, als Computer neu erfunden wurden, reichten sieben Bits (weniger als ein Byte) aus, um jedes Zeichen zu kodieren. Die erste Kodierung enthielt nur 128 Zeichen. Diese Kodierung wurde ASCII genannt .

ASCII steht für American Standard Code for Information Interchange – eine amerikanische Standardcodetabelle für druckbare Zeichen und einige Sondercodes.

Es besteht aus 33 nicht druckbaren Steuerzeichen (die sich auf die Verarbeitung von Text und Leerzeichen auswirken) und 95 druckbaren Zeichen, darunter Zahlen, lateinische Groß- und Kleinbuchstaben sowie mehrere Satzzeichen.

Unicode-Kodierung

Als Computer immer beliebter wurden, begann jedes Land, seine eigene Kodierung herauszugeben. Normalerweise nahmen sie ASCII als Ausgangspunkt und ersetzten selten verwendete ASCII-Zeichen durch Symbole aus ihren jeweiligen Alphabeten.

Im Laufe der Zeit entstand die Idee, eine einzige Kodierung zu erstellen, die alle Zeichen aller Kodierungen auf der Welt enthält.

Unicode-Kodierung 1

So wurde 1993 die Unicode- Kodierung geschaffen und die Java-Sprache war die erste Programmiersprache, die diese Kodierung als Standard zum Speichern von Text verwendete. Mittlerweile ist Unicode der Standard für die gesamte IT-Branche.

Obwohl Unicode selbst der Standard ist, gibt es mehrere Darstellungen oder Unicode-Transformationsformate (UTF): UTF-8, UTF-16 und UTF-32 usw.

Java verwendet eine erweiterte Version der Unicode-Kodierung – UTF-16: Jedes Zeichen wird in 16 Bit (2 Byte) kodiert. Es bietet Platz für bis zu 65.536 Zeichen!

In dieser Kodierung finden Sie fast jedes Zeichen jedes Alphabets auf der Welt. Natürlich hat niemand das Ganze auswendig gelernt. Man kann nicht alles wissen, aber man kann alles googeln.

Um ein Unicode-Zeichen mithilfe seines Codes in Ihr Programm zu schreiben, müssen Sie \u+ den Code hexadezimal schreiben . Zum Beispiel,\u00A9

Code Konsolenausgabe
System.out.println("\u00A9 CodeGym");
© CodeGym


5. Unicode: Codepunkt

„640 Kilobyte sollten für alle reichen! Oder auch nicht.“ (Zitat Bill Gates zugeschrieben)

Das Leben ist hart und mit der Zeit wurde die UTF-16-Kodierung immer unzureichender. Es stellt sich heraus, dass es viele asiatische Sprachen gibt und sie viele Glyphen haben. Und all diese Glyphen können einfach nicht in 2 Bytes gepackt werden.

Was kann getan werden? Verwenden Sie mehr Bytes !

Aber der char-Typ ist nur 2 Bytes groß und es ist nicht so einfach, ihn auf 4 zu ändern: Milliarden von Zeilen Java-Code wurden auf der ganzen Welt geschrieben, der kaputt gehen würde, wenn der char-Typ plötzlich 4 Bytes auf einer Java-Maschine wäre. Wir können den Zeichentyp also nicht ändern!

Es gibt einen anderen Ansatz. Denken Sie daran, wie wir Zeichen maskieren, indem wir ihnen einen Backslash voranstellen. Im Grunde haben wir ein einzelnes Zeichen mit mehreren Zeichen codiert.

Die Entwickler von Java entschieden sich für den gleichen Ansatz.

Einige Zeichen, die optisch als einzelnes Zeichen erscheinen, werden als zwei chars in einer Zeichenfolge codiert:

Code Konsolenausgabe
System.out.println("\uD83D\uDD0A");
🔊

Jetzt kann Ihr Java-Programm sogar Emojis auf der Konsole ausgeben 😎