要從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中文網其他相關文章!