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!