我需要将使用拉丁字母书写的欧洲地名与某些字符上的重音符号(变音符号)进行比较。有很多中欧和东欧的名字在 and 上带有重音符号,如拉丁字符ž
,ü
但有些人只使用没有重音符号的常规拉丁字符写名字,如z
and u
。
我需要一种方法让我的系统识别例如与使用的所有其他重音字符mšk žilina
相同msk zilina
和相似。有没有一种简单的方法可以做到这一点?
我需要将使用拉丁字母书写的欧洲地名与某些字符上的重音符号(变音符号)进行比较。有很多中欧和东欧的名字在 and 上带有重音符号,如拉丁字符ž
,ü
但有些人只使用没有重音符号的常规拉丁字符写名字,如z
and 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