esigenze specifiche sono un po 'vago, ma suppongo che si vuole una cosa che fa quello Normalizer fa, ma con la caratteristica di grumo insieme alcuni punti di codice Unicode per un carattere - simile a utf8proc.
vorrei andare per un approccio 2-step:
- Primo utilizzo Normalizer.normalize per creare qualunque cosa (de-) composizione che desiderate
- Poi scorrere i punti di codice del risultato e sostituire unificare i caratteri il modo in cui ti piace
Entrambi devono essere semplici. Per 2, se si utilizzano caratteri fuori dal riquadro multilingue di base, quindi scorrere i punti di codice utilizzando uno appropriate algorithm for doing so. Se si utilizzano solo punti di codice BMP, quindi semplicemente scorrere i caratteri.
Per i personaggi che si desidera grumo insieme, creare una struttura di dati di sostituzione per la mappatura ununified punto di codice ->punto codice unificato. Map<Character, Character>
o Map<Integer, Integer>
vengono in mente per questo. Compila la mappa di sostituzione a tuo piacimento, ad es. prendendo le informazioni da utf8proc's lump.txt e una fonte per character categories.
Map<Character, Character> LUMP;
static {
LUMP = new HashMap<Character, Character>();
LUMP.put('\u2216', '\\'); // set minus
LUMP.put('\u007C', '|'); // divides
// ...
}
Creare un nuovo StringBuilder o qualcosa di simile con le stesse dimensioni della stringa normalizzata. Quando si esegue l'iterazione sui punti del codice, verificare se LUMP.get(codePoint)
non è nullo. In questo caso, aggiungi il valore restituito, altrimenti aggiungi il punto di codice a StringBuilder. Questo dovrebbe essere.
Se necessario, è possibile supportare un modo di caricare il contenuto di LUMP da una configurazione, ad es. da un oggetto Properties.
fonte
2010-11-08 12:04:55
PS: sembra che devo implementarlo. Qualche idea su come farlo? – valodzka