我需要比较使用拉丁字母书写并带有重音符号(变音符号)的欧洲地名。许多中欧和东欧的地名,如在 ž
和 ü
上带有重音符号的拉丁字母,但有些人只使用不带重音符号的普通拉丁字母,如z
和u
。
我需要一种方法使我的系统能够识别例如mšk žilina
与msk zilina
相同,以及所有其他使用变音符号的字符。是否有简单的方法可以做到这一点?
我需要比较使用拉丁字母书写并带有重音符号(变音符号)的欧洲地名。许多中欧和东欧的地名,如在 ž
和 ü
上带有重音符号的拉丁字母,但有些人只使用不带重音符号的普通拉丁字母,如z
和u
。
我需要一种方法使我的系统能够识别例如mšk žilina
与msk zilina
相同,以及所有其他使用变音符号的字符。是否有简单的方法可以做到这一点?
java.text.Normalizer
和一个小正则表达式来去掉变音符号。public static String removeDiacriticalMarks(String string) {
return Normalizer.normalize(string, Form.NFD)
.replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
}
使用示例:
String text = "mšk žilina";
String normalized = removeDiacriticalMarks(text);
System.out.println(normalized); // msk zilina