Hinweis zur Verwendung des Datentyps char
In Java wird der Datentyp char zur Darstellung von Zeichen verwendet, der Typ char kann jedoch nicht alle Zeichen darstellen.
Unicode-Zeichensatz
Zuerst müssen wir wissen, dass wir den Unicode-Zeichensatz in Java verwenden. Vor seinem Erscheinen gab es viele Zeichensätze wie ANSI, GB2312 usw. Da es viele Zeichensätze mit unterschiedlichen Standards gibt, führt dies zu zwei Problemen:
Für jeden gegebenen Codewert können unterschiedliche Zeichen unterschiedlichen Zeichen in unterschiedlichen Zeichensätzen entsprechen; 🎜>
Nachdem wir den Unicode-Zeichensatz haben, müssen wir uns überlegen, wie diese Zeichen übertragen und gespeichert werden. Dies ist die Art und Weise, wie die Unicode-Kodierung (wir nennen sie UTF) implementiert wird. Die bekannten Methoden UTF-8, UTF-16 usw. sind verschiedene Implementierungsmethoden für die Unicode-Kodierung.
Zu Beginn der Geburt des Unicode-Zeichensatzes wurde die Kodierungsmethode mit fester Länge UCS-2 (2-Byte-Universal-Zeichensatz) verwendet, um den Unicode-Zeichensatz zu kodieren 16 Bit. Zeichenkodierung, es können also bis zu 2^16 = 65536 Zeichen kodiert werden (Kodierungsbereich von U 0000 ~ U FFFF). Unter diesen Umständen verwendeten die Designer weniger als die Hälfte der Anzahl, um alle Zeichen zu codieren, und gingen davon aus, dass der verbleibende Platz ausreichte, um in Zukunft neue Zeichen zu codieren.
Leider überschritt die Anzahl der Zeichen im Unicode-Zeichensatz durch die kontinuierliche Hinzufügung chinesischer, japanischer, koreanischer und anderer ideografischer Zeichen schnell die maximale Anzahl von Zeichen, die mit 16 Bit codiert werden können, so die Designer Der Zeichensatz hat ein neues Design.
Das neue Design unterteilt alle Zeichen im Zeichensatz in 17 Codeebenen. Unter diesen wird der Codepunktbereich U 0000 ~ U FFFF als Basic Multilingual Plane (BMP) bezeichnet, und die übrigen Zeichen werden in 16 Ergänzungsebenen (Supplementary Plane) klassifiziert. Der Codepunktbereich beträgt U 10000 ~ U 10FFFF Zeichen in der Hilfsebene werden Ergänzungszeichen genannt.
Nachdem die Zeichen im Unicode-Zeichensatz in verschiedene Ebenen umklassifiziert wurden, müssen Sie auf die folgenden zwei Aspekte achten:
UTF-16 verwendet auch eine 16-Bit-Kodierung zur Darstellung von Unicode-Zeichen, d. h. die Codeeinheit von UTF-16 beträgt 16 Bit. Codeeinheit bezieht sich auf die grundlegendste Einheit der Zeichenkodierung, das heißt, jedes Zeichen muss aus n (n≥1) Codeeinheiten bestehen.
Da unter UTF-16 die 16-Bit-Länge nur 65536 Zeichen darstellen kann, werden standardmäßig alle Zeichen im BMP-Bereich zugeordnet, sodass der Teil U D800 ~ U DFFF leer bleibt und die Zeichen der Hilfsebene ebenfalls leer bleiben mithilfe dieses leeren Teils ausgedrückt werden. Dies ist die Genialität des UTF-16-Designs, das das Codierungsproblem aller Zeichen löst, ohne Platz zu verschwenden.
Wie drückt man also die Zeichen der Hilfsebene aus? Tatsächlich werden die Codepunkte der Hilfsebenenzeichen in ein Paar 16 Bit langer Codeeinheiten codiert, das als Ersatzpaar bezeichnet wird, und das Ersatzpaar muss in den Teil U D800 ~ U DFFF des BMP fallen. Dies löst das Problem der Codierung des gesamten Unicode-Zeichensatzes mit 16-Bit-Codeeinheiten. Es ist zu beachten, dass der Teil U D800 ~ U DFFF als Proxy-Bereich bezeichnet werden kann, wobei der Teil U D800 ~ U DBFF als High-Proxy-Bereich (führender Proxy-Bereich) und der Teil U DC00 ~ U DFFF als High-Proxy-Bereich (führender Proxy-Bereich) bezeichnet wird niedriger Proxy-Bereich (Back-End-Agent-Bereich).
Im Folgenden wird die Codierungsmethode von Hilfsebenenzeichen am Beispiel der UTF-16-Codierung von U 64321, einem Zeichen in der Hilfsebene, erläutert.
Subtrahieren Sie zunächst 0x10000 vom Codepunkt dieses Zeichens, um einen Wert mit einer Länge von 20 Bits zu erhalten. Der Bereich dieses Werts muss zwischen 0x0000 und 0xFFFF liegen.
Verwenden Sie den Wert der höherwertigen 10 Bits von Vx als Operationsbasis Vh des höherwertigen Agenten und verwenden Sie den Wert der niederwertigen 10 Bits als Operationsbasis Vl des Agenten niedrigerer Ordnung. Der Wertebereich dieser beiden 10-Bit-Werte muss zwischen 0x0000 ~ 0x3FF liegen.
Führen Sie eine bitweise ODER-Operation für Vh und Vl mit den Codepunkten an der Startposition des High-Proxy-Bereichs bzw. des Low-Proxy-Bereichs durch. Das Ergebnis ist das Zeichen in die UTF-16-Kodierung der Hilfsebene von U 64321.
Am Ende wird das Zeichen U 64321 in ein Ersatzzeichenpaar bestehend aus einem Ersatzzeichen höherer Ordnung und einem Ersatzzeichen niedriger Ordnung codiert gleichzeitig diesen Charakter darzustellen.
Anhand des obigen Beispiels können wir sehen, dass jedes Zeichen in der Hilfsebene als Ersatzpaar codiert wird, das aus zwei 16-Bit-Ersatzcodierungen unter UTF-16 besteht. Dies wird in den Programmzeichen dargestellt benötigt nicht mehr 16 Bit Speicherplatz, sondern 32 Bit.
Es wird nicht empfohlen, den Datentyp char in Java-Programmen zu verwenden
Nach der obigen Erklärung des Unicode-Zeichensatzes und UTF-16 werden wir nun diskutieren, warum Es wird nicht empfohlen, den Datentyp char in Java-Programmen zu verwenden.
Da Java den 16-Bit-Unicode-Zeichensatz, also UTF-16, verwendet, hat der char-Datentyp in Java eine feste Länge und seine Länge beträgt immer nur 16 Bit. Der char-Datentyp kann nur stellen Codes dar. Die Zeichen zwischen U 0000 und U FFFF sind die Zeichen in BMP. Wenn der Codepunkt diesen Bereich überschreitet, wird der Datentyp char nicht unterstützt, selbst wenn zusätzliche Zeichen verwendet werden, da die zusätzlichen Zeichen zum Speichern eine Länge von 32 Bit erfordern und wir zum Speichern dieses Zeichens nur String verwenden können.
Wenn der oben geschriebene Code den Datentyp char zum Speichern der Zeichen der Hilfsebene verwendet, meldet der Compiler den Fehler „Ungültige Zeichenkonstante“.
Mit der kontinuierlichen Zunahme der Internetnutzer und der kontinuierlichen Bereicherung der Internetsprachen verwenden Benutzer im Internet zunehmend einige Sonderzeichen, um eine reichhaltige Semantik auszudrücken, und diese Zeichen gehören wahrscheinlich zur Hilfsebene. Zusatzzeichen in Wenn wir also den Typ char für die Verarbeitung verwenden, verringert dies wahrscheinlich die Robustheit unseres Programms.
Details zum String
Ermitteln Sie die Stringlänge
String ist ein sehr häufiger Datentyp, den wir in der Programmierung verwenden. die zur Darstellung einer Zeichenfolge verwendet wird. Wenn wir uns den Quellcode von String ansehen, können wir sehen, dass die darunter liegende Ebene tatsächlich ein Array vom Typ char zum Speichern unserer Zeichen verwendet.
Wir wissen auch, dass durch Aufrufen der Methode length() die Länge der Zeichenfolge ermittelt werden kann, d. h. die Anzahl der Zeichen in der Zeichenfolge. Seine Implementierung besteht darin, die Länge des zugrunde liegenden Wertearrays direkt zurückzugeben. Der Code lautet wie folgt:
In Kombination mit unserem oben genannten Wissen über die Zeichenkodierung wissen wir, dass die Länge von char in Java immer 16 Bit beträgt. Wenn wir zusätzliche Zeichen in der Zeichenfolge verwenden, bedeutet dies, dass wir 2 char-Typlängen zum Speichern benötigen Da es sich um einen zugrunde liegenden Array-Wert handelt, der Zeichen speichert, sind zwei Array-Elementpositionen erforderlich. Im folgenden Programm erhalten wir also ein unerwartetes Ergebnis:
Nach unserer Vorstellung sollte die Zeichenfolge tt nur 8 Zeichen enthalten, die tatsächliche Ausgabe ist jedoch 9. Wir haben oben bereits erwähnt, dass Java einen 16-Bit-Unicode-Zeichensatz verwendet, sodass die Länge einer Codeeinheit in Java ebenfalls 16 Bit beträgt. Für die Darstellung eines Zusatzzeichens sind zwei Codeeinheiten erforderlich, also das tt-Zeichen in der Zeichenfolge