He estado buscando en todo StackOverflow en el bazillion de preguntas sobre capitalizar una palabra en Java, y a ninguno de ellos parece importarle lo más mínimo la internacionalización y, de hecho, ninguna parece realmente para trabajar en un contexto internacional. Ésta es mi pregunta.Caso de título correcto en Unicode en Java
Tengo una cadena en Java, que representa una palabra - todos son caracteres de Cartas(), sin espacios en blanco. Quiero hacer el primer carácter mayúscula y el resto minúscula. Tengo la ubicación de mi palabra a mano.
Es bastante fácil llamar .substring (1) .toLowerCase (Locale) para la última parte de la cadena. No tengo ni idea de cómo obtener el primer personaje correcto, sin embargo.
El primer problema que tengo es en holandés, donde "ij" es un dígrafo que debe escribirse en mayúscula. Podría hacer un caso especial a mano, porque lo sé; ahora puede haber otros idiomas con este tipo de cosas que no conozco, y estoy seguro de que Unicode me dirá si lo pregunto bien. Pero no sé cómo preguntar.
Incluso si se resuelve el problema anterior, todavía estoy atascado con una forma incorrecta de manejar inglés, turco y griego, porque Character admite el título pero no la configuración regional, y String admite configuraciones regionales pero no el título.
Si tomo el punto de código y lo paso a Character.toTitleCase(), esto fallará porque no hay forma de pasar la configuración regional a este método. Entonces, si la configuración regional del sistema está en inglés pero la palabra es en turco, y la primera letra de la palabra es "i", obtendré "I" en lugar de "İ" y esto es incorrecto. Ahora, si tomo una subcadena y uso .toUpperCase (Locale), esto fallará porque es mayúscula y no por el título. Entonces, si la palabra es griega, seguiré recibiendo el personaje equivocado.
Si alguien tiene consejos útiles, me gustaría escucharlos.
'toTitleCase()' no necesita una configuración regional, ya que es independiente de la configuración regional. --- Si desea que los dos caracteres 'ij' sean un dígrafo, debe convertirlo al carácter unicode dígrafo' ij' (['LATIN SMOR LIGATURE IJ' (U + 0133)] (http: // www. fileformat.info/info/unicode/char/0133/index.htm)). – Andreas