This question already has an answer here:
I need to compare the names of European places that are written using the Latin alphabet with accent marks (diacritics) on some characters. There are lots of Central and Eastern European names that are written with accent marks like Latin characters on ž
and ü
, but some people write the names just using the regular Latin characters without accent marks like z
and u
.
I need a way to have my system recognize for example mšk žilina
being the same as msk zilina
, and similar for all the other accented characters used. Is there a simple way to do this?
You can make use of java.text.Normalizer
and a little regex to get rid of the diacritical marks.
public static String removeDiacriticalMarks(String string) {
return Normalizer.normalize(string, Form.NFD)
.replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
}
Usage example:
String text = "mšk žilina";
String normalized = removeDiacriticalMarks(text);
System.out.println(normalized); // msk zilina
来源:https://stackoverflow.com/questions/3222972/removing-accent-marks-diacritics-from-latin-characters-for-comparison