从拉丁字符中删除重音符号(变音符号)以进行比较

时间:2010-07-11 12:01:34

标签: java string diacritics transliteration

我需要将使用拉丁字母书写的欧洲地方的名称与某些字符上的重音符号(变音符号)进行比较。有许多中欧和东欧名称在žü上使用重音符号(如拉丁字符)编写,但有些人只使用常规拉丁字符编写名称,而不使用{{1}等重音符号}和z

我需要一种让我的系统识别的方法,例如umšk žilina相同,并且与所有其他重音字符相似。有一个简单的方法吗?

1 个答案:

答案 0 :(得分:11)

您可以使用java.text.Normalizerlittle regex来摆脱diacritical marks

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