Odháčkování

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}+", "");

Celé to funguje tak, že se znak (např. Á) převede na jeho rozloženou (dekomponovanou) formu (např. A ‚). Znak je tedy převeden na dva znaky. Následně se všechny kombinované diakritické znaky odstraní (háčky, čárky, kroužky, …) pomocí regulárního výrazu. Unicodová tabulka obsahuje téměř pro každý znak i jeho přepis na dekomponovanou formu a tak by uvedené řešení mělo fungovat na většinu jazyků světa.