Ein Vorlesungsausschnitt mit einem Mentor im Rahmen des Codegym University-Kurses. Melden Sie sich für den gesamten Kurs an.


„Grüße, Amigo. Es war einmal, dass du gelernt hast, dass du zum Schreiben einer Zeichenfolge im Code diese in doppelte Anführungszeichen setzen musst.“

„Ja, und das gibt uns ein String-Literal . Es ist noch nicht lange her, dass ich davon erfahren habe.“

„In unserem Beruf ist das schon lange her. Aber darum geht es im Moment nicht. Sagen Sie mir stattdessen bitte, was zu tun ist, wenn wir Anführungszeichen innerhalb eines String-Literals benötigen?“

„Hmm... Eine Zeichenfolge mit Anführungszeichen – was könnte einfacher sein. Ich bin sicher, es gibt eine Möglichkeit...“

„Ja. Nehmen wir an, wir möchten den Text anzeigen "Friends" was nominated for an "Oscar". Wie würden wir das machen?“

„Ehrlich gesagt habe ich keine Ahnung. Mir fällt nichts ein.“

„Durch Logik werden Sie keine Lösung finden. Ich zeige Ihnen einfach, was zu tun ist.“

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

„Diese Option funktioniert nicht, da der Compiler dies als völlig anderen Code interpretiert:

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

„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?“

„Es gibt einen Weg. Man nennt ihn 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 wird:

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"

„Nun, ich werde nicht sagen, dass das super praktisch ist …“

„Aber was können Sie tun, das sind die Regeln. Ein weiterer wichtiger Punkt. Ein Anführungszeichen, dem ein Backslash vorangestellt ist, stellt ein einzelnes Zeichen dar: Wir verwenden einfach eine raffinierte Notation, die die Fähigkeit des Compilers, Zeichenfolgenliterale in unserem zu erkennen, nicht beeinträchtigt Code. 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

Häufige Situationen, die beim Escapezeichen von Zeichen auftreten

„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, fügen Sie einfach ein paar Zeichen hinzu \n. “

Beispiel:

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

„Es gibt insgesamt 8 spezielle Kombinationen wie diese, 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

„Du hast mir schon zwei davon gezeigt. Was bedeuten die anderen sechs?“

„Ich erkläre dir gleich alles.

\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");
Hel World

\rist das Wagenrücklaufzeichen

Dieses Zeichen bewegt den Cursor an den Anfang der aktuellen Zeile, ohne den Text zu ändern (abhängig von der JDK-Version). Was auch immer als nächstes angezeigt wird, überschreibt die vorhandene Zeichenfolge.

Beispiel:

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

\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!

„Die Verwendung von doppelten Schrägstrichen macht Sinn. Aber alles andere konnte ich mir nicht sofort merken. Ich muss mich auf Ihre Hinweise verlassen.“

„Nach und nach werden Sie sich daran erinnern, was Sie brauchen. Machen Sie sich keine Sorgen. Und für alles andere gibt es Google.“

Unicode-Kodierung

„Sie wissen bereits, dass jedes auf dem Bildschirm angezeigte Zeichen einem bestimmten Zahlencode entspricht. 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 .

„Das ist ein seltsamer Name.“

„Daran ist nichts Seltsames. Es ist eine Abkürzung. 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.

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

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

Unicode-Kodierung

„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. Heute 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 ist in 16 Bit (2 Bytes) kodiert. Es kann bis zu 65.536 Zeichen aufnehmen! In dieser Kodierung können Sie fast jedes Zeichen aller Alphabete der Welt finden. "

„Ich hoffe, ich muss es nicht auswendig wissen?“

„Wenn du willst, dann mach es!“

„Okay, gut. Ich verwende diese Regel: Man kann nicht alles wissen, aber man kann alles googeln.“

\u„Ein rationaler Ansatz ist alles. Um also ein Unicode-Zeichen in Ihrem Programm mithilfe seines Codes zu schreiben, müssen Sie + den Code hexadezimal schreiben . Zum Beispiel:\u00A9

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

Unicode: Codepunkt

„640 Kilobyte sollten für alle reichen! Oder auch nicht.“ Bill Gates hat das einmal gesagt. Oder nicht. Zumindest dieses Zitat wird ihm zugeschrieben.

„Haha. 640 Kilobyte reichen nicht einmal aus, um das Gehirn eines Reinigungsroboters zu laden.“

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

"Also, was machen wir?"

„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 kaputtgehen würde, wenn der char-Typ plötzlich zu 4 Bytes in Java würde Maschine. Daher können wir den Zeichentyp nicht ändern!

„Es gibt noch 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 haben sich für den gleichen Ansatz entschieden.“

„Einige Zeichen, die visuell 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 😎“

„Das werde ich auf jeden Fall nutzen, um Spaß zu haben!“