>Java >java지도 시간 >Java의 유니코드 문자열에서 분음 부호를 효율적으로 제거하려면 어떻게 해야 합니까?

Java의 유니코드 문자열에서 분음 부호를 효율적으로 제거하려면 어떻게 해야 합니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-11 01:23:10549검색

How Can I Efficiently Remove Diacritics from Unicode Strings in 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의 유니코드 문자열에서 분음 부호를 효율적으로 제거하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.