Así que sé acerca de String#codePointAt(int)
, pero está indexado por el char
offset, no por el offset del punto de código.¿Cómo puedo iterar a través de los puntos de código Unicode de una cadena Java?
estoy pensando en probar algo como:
String#charAt(int)
utilizando para obtener elchar
en un índice- comprobación de que el
char
está en el high-surrogates range- si es así, utilizar
String#codePointAt(int)
a obtener el punto de código, e incrementar el índice por 2 - si no, utilice el
char
valor que el punto de código, e incrementar el índice de 1
- si es así, utilizar
Pero mis preocupaciones son
- no estoy seguro de si los puntos de código que son naturalmente en las altas sustitutos gama se almacenarán como dos
char
valores o uno - esto parece una manera muy costosa de iterar a través de los caracteres
- alguien debe haber encontrado algo mejor.
En cuanto a si es o no "caro", bueno ... no hay otra forma integrada en Java. Pero si solo está tratando con scripts latinos/europeos/cirílicos/griegos/hebreos/árabes, entonces simplemente se relaciona() con el contenido de su corazón. :) –
Pero no deberías. Por ejemplo, si su programa genera XML y si alguien le da un oscuro operador matemático, de repente su XML puede ser inválido. –
@Jonathan Feinberg Eso es lo que pensé. Pero aquí vino esa especial matemática E. UTF-16 funciona el 99% del tiempo, pero luego se vuelve realmente doloroso. Especialmente cuando los problemas permanecen ocultos durante mucho tiempo. – Martin