要从 Unicode 字符中删除变音标记(例如波浪线、变音符号等),请考虑使用以下算法:
在 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中文网其他相关文章!