Also ich weiß über String#codePointAt(int)
, aber es wird durch den char
Offset, nicht durch den Codepunkt Offset indiziert.Wie kann ich die Unicode-Codepunkte einer Java-Zeichenfolge durchlaufen?
Ich denke, zu versuchen, so etwas wie:
String#charAt(int)
mit denchar
bei einem Index- Prüfung zu erhalten, ob die
char
im high-surrogates range- wenn ja, verwenden
String#codePointAt(int)
zu Holen Sie den Codepunkt, und erhöhen Sie den Index um 2 - , wenn nicht, verwenden Sie die angegebenen
char
Wert als Codepunkt und erhöht den Index um 1
- wenn ja, verwenden
Aber meine Bedenken sind
- Ich bin nicht sicher, ob Codepunkte, die als gespeichert werden natürlich in den High-Surrogate Bereich zwei
char
Werte oder eine - das scheint wie eine schrecklich teure Art und Weise, um durch die Zeichen
- jemand muss sich etwas besseres einfallen lassen.
Ob es "teuer" ist, naja ... es gibt keinen anderen Weg, der in Java eingebaut ist. Aber wenn du nur mit lateinischen/europäischen/kyrillischen/griechischen/hebräischen/arabischen Schriften arbeitest, dann gehst du einfach an charAt() nach Herzenslust. :) –
Aber du solltest nicht. Wenn Ihr Programm beispielsweise XML ausgibt und jemand einen obskuren mathematischen Operator angibt, ist Ihr XML-Code möglicherweise ungültig. –
@ Jonathan Feinberg Das habe ich mir gedacht. Aber hier kam der spezielle mathematische E. UTF-16 zu 99% der Zeit - aber dann wird es wirklich schmerzhaft. Vor allem, wenn die Probleme lange Zeit verborgen bleiben. – Martin