首页 >Java >java教程 >如何在 Java 中有效地删除 Unicode 字符串中的变音符号?

如何在 Java 中有效地删除 Unicode 字符串中的变音符号?

Barbara Streisand
Barbara Streisand原创
2024-12-11 01:23:10557浏览

How Can I Efficiently Remove Diacritics from Unicode Strings in Java?

从 Unicode 字符中删除变音标记

要从 Unicode 字符中删除变音标记(例如波浪线、变音符号等),请考虑使用以下算法:

Java 算法

在 Java 中,使用以下代码:

public static final Pattern DIACRITICS_AND_FRIENDS = Pattern.compile("[\p{InCombiningDiacriticalMarks}\p{IsLm}\p{IsSk}\u0591-\u05C7]+");

private static String stripDiacritics(String str) {
    str = Normalizer.normalize(str, Normalizer.Form.NFD);
    str = DIACRITICS_AND_FRIENDS.matcher(str).replaceAll("");
    return str;
}

示例:

stripDiacritics("Björn")  = Bjorn

增强算法

要获得更全面的解决方案,请包括第二个清理阶段来处理非变音符号特殊字符。

public static final char DEFAULT_REPLACE_CHAR = '-';
public static final String DEFAULT_REPLACE = String.valueOf(DEFAULT_REPLACE_CHAR);
private static final ImmutableMap<String, String> NONDIACRITICS = ImmutableMap.<String, String>builder()
        // ... [List of non-diacritic characters]

public static String simplifiedString(String orig) {
    String str = orig;
    if (str == null) {
        return null;
    }
    str = stripDiacritics(str);
    str = stripNonDiacritics(str);
    if (str.length() == 0) {
        // ... 
    }
    return str.toLowerCase();
}

// ... [Continued implementation]

适用性和限制

这些算法有效地删除了用于搜索目的的变音符号。但是,非变音符号特殊字符(例如 Białegostok 的“ł”)需要额外处理。增强算法尝试用最接近的等效字符替换这些字符。

以上是如何在 Java 中有效地删除 Unicode 字符串中的变音符号?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn