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

标签 java string diacritics transliteration

<分区>

我需要将使用拉丁字母书写的欧洲地名与某些字符上的重音符号(变音符号)进行比较。有很多中欧和东欧的名字都是用重音符号写的,比如 žü 上的拉丁字符,但有些人只用普通的拉丁字符写名字,而不用重音符号,例如 zu

我需要一种方法让我的系统识别例如 mšk žilinamsk zilina 相同,并且对于使用的所有其他重音字符都相似。有没有简单的方法可以做到这一点?

最佳答案

您可以使用 java.text.Normalizer和一个 little 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

关于java - 从拉丁字符中删除重音符号(变音符号)以进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3222972/

相关文章:

Java 枚举定义

java - 无法解析符号 'ButterKnife'

java - 将 PCRE 正则表达式修改为 C# 或 Java 支持的正则表达式

c# - String.Empty、null、Length 或 String.IsEmptyOrNull?

java - Normalizer.normalize(s, Normalizer.Form.NFD) 和 StringUtils.stripAccents(s) 之间的实际区别是什么?

java - Spring Data JPA 是否有任何方法可以使用方法名称解析对实体列求和?

python - 返回 Python 字符串中第一个非空白字符的最低索引

java - 将 Scanner next 字符串转换为 Int 并检查输入的文本是否为数字

PHP包含html页面字符集问题

regex - Oracle 正则表达式 :\Q\E doesn't work