Heim  >  Artikel  >  Java  >  Wie kann man Unicode-Codepunkte in Java-Strings effizient durchlaufen?

Wie kann man Unicode-Codepunkte in Java-Strings effizient durchlaufen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-02 06:49:02487Durchsuche

How to Efficiently Iterate Over Unicode Codepoints in Java Strings?

Iterieren über Unicode-Codepunkte in Java-Strings

Während die String-Klasse die Methode codePointAt(int) für den Zugriff auf Unicode-Codepunkte bereitstellt, ist ihre Indizierung darauf angewiesen auf Zeichenoffsets und nicht auf Codepunktoffsets. Dies wirft Bedenken hinsichtlich der Handhabung von Zeichen im Bereich hoher Ersatzzeichen und der Effizienz des vorgeschlagenen Iterationsansatzes mit zeichenweisem Scannen auf.

Verbesserte Iterationslösung

Java Die interne String-Darstellung verwendet ein UTF-16-basiertes Codierungsschema. Zeichen außerhalb der Basic Multilingual Plane (BMP) werden mithilfe des Surrogacy-Schemas codiert. Erwägen Sie für eine effiziente Iteration die Verwendung des folgenden kanonischen Ansatzes:

<code class="java">final int length = s.length();
for (int offset = 0; offset < length; ) {
   final int codepoint = s.codePointAt(offset);

   // process the codepoint

   offset += Character.charCount(codepoint);
}</code>

Dieser Ansatz verarbeitet korrekt Ersatzpaare für Zeichen außerhalb des BMP. Durch die Verwendung von Character.charCount(codepoint) wird der Offset effizient um die entsprechende Anzahl von Zeichen für jeden Codepunkt erhöht.

Das obige ist der detaillierte Inhalt vonWie kann man Unicode-Codepunkte in Java-Strings effizient durchlaufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn