sus requisitos específicos son un poco vago, pero supongo que usted quiere una cosa que hace lo hace Normalizer, pero con la característica de agrupar ciertos puntos de código Unicode de un carácter - similar a utf8proc.
Yo iría por un enfoque de 2 pasos:
- Primer uso Normalizer.normalize para crear lo (des) composición desea
- iterar a través de los puntos de código del resultado y reemplazar unificar los caracteres de la manera que te gusta
Ambos deberían ser sencillos. Para 2, si está tratando con personajes fuera del Panel Multilingüe Básico, repita los puntos de código usando appropriate algorithm for doing so. Si solo está utilizando puntos de código BMP, simplemente itere sobre los caracteres.
Para los caracteres que desea agrupar, crear una estructura de datos de sustitución para el mapeo ununified punto de código -> punto código unificado. Map<Character, Character>
o Map<Integer, Integer>
vienen a la mente por eso. Rellene el mapa de sustitución a su gusto, p. tomando la información de de utf8proc lump.txt y una fuente para character categories.
Map<Character, Character> LUMP;
static {
LUMP = new HashMap<Character, Character>();
LUMP.put('\u2216', '\\'); // set minus
LUMP.put('\u007C', '|'); // divides
// ...
}
Crea un nuevo StringBuilder o algo similar con el mismo tamaño que tu cadena normalizada. Al iterar sobre los puntos de código, verifique si LUMP.get(codePoint)
no es nulo. En este caso, agregue el valor devuelto, de lo contrario agregue el punto de código a StringBuilder. Eso debería ser.
Si es necesario, puede admitir una forma de cargar los contenidos de LUMP desde una configuración, p. de un objeto Properties.
PD: Parece que tengo que implementarlo. ¿Alguna idea de como hacerlo? – valodzka