jAbLoK

re: Odháčkování

Zasláno do Java by Pavel Kolesnikov na Prosinec 16th, 2007

Cituji Petr Ferschmana:

Snad každý český programátor narazil na problém odstranění diakritiky z textu (tzv. odháčkování). Pro tyto účely jsem si kdysi vytvořil jednoduchou mapovací tabulku pro znaky v kódování ISO-8859-2. Nyní jsem v Javě potřeboval něco podobného a našel jsem lepší řešení:

   String decomposed = java.text.Normalizer.normalize(string, Normalizer.Form.NFD);
   return  decomposed.replaceAll("p{InCombiningDiacriticalMarks}+", "");

Pěkný, neznal jsem. Jen si dovolím dvě doplnění:

  • java.text.Normalizer přišel až s Javou 6
  • pokud ještě šestku nemáte, nemusite spoléhat na mapovací tabulky, ale můžete použít icu4j od IBM (pod proprietární, ale nerestriktivně vypadající open-source licencí). Pak můžete pro změnu psát něco jako:
       String rule = "Any-Latin; NFD; [:Nonspacing Mark:] Remove; NFC";
       Transliterator tr = Transliterator.getInstance(rule);
       return tr.transform(src);
    
Tagged with: ,