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

6

我需要比较使用拉丁字母书写并带有重音符号(变音符号)的欧洲地名。许多中欧和东欧的地名,如在 žü 上带有重音符号的拉丁字母,但有些人只使用不带重音符号的普通拉丁字母,如zu

我需要一种方法使我的系统能够识别例如mšk žilinamsk zilina相同,以及所有其他使用变音符号的字符。是否有简单的方法可以做到这一点?

1个回答

11
您可以利用 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

你知道Objective-C的文本规范化器吗?我也有同样的问题。 - Ilker Baltaci

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接