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

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

Barbara Streisand
Barbara Streisand원래의
2024-12-01 15:36:14243검색

How Can I Efficiently Remove Diacritical Marks from Unicode Strings in Java?

유니코드 문자에서 발음 구별 부호 제거

문제 설명

틸드, 곡절 부호, 캐럿, 움라우트, 캐론과 같은 발음 구별 부호가 변경될 수 있습니다. 문자의 발음. 효율적인 검색 및 비교를 용이하게 하려면 이러한 표시를 제거하고 문자의 "간단한" 대응 부분을 가져와야 할 수도 있습니다.

해결책

유니코드 정규화 및 정규식을 활용하여 다음 Java 구현 발음 구별 부호를 효과적으로 제거합니다.

import java.text.Normalizer;
import java.util.regex.Pattern;

public class DiacriticStripper {

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

    public static String stripDiacritics(String input) {
        String normalizedInput = Normalizer.normalize(input, Normalizer.Form.NFD);
        return DIACRITICS_PATTERN.matcher(normalizedInput).replaceAll("");
    }

}

예를 들어 입력 문자열은 "ńūňñṅņṇṋṉ̈ɲSONᶇɳş"는 "n"으로 변환됩니다.

확장 문자열 단순화

제공된 솔루션은 발음 구별 부호를 구체적으로 해결합니다. 추가로 분음 부호가 없는 특수 문자를 처리해야 하는 경우 보다 포괄적인 문자열 단순화 방법을 사용할 수 있습니다.

import java.text.Normalizer;
import java.util.regex.Pattern;

public class StringSimplifier {

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

    public static String simplify(String input) {
        String normalizedInput = Normalizer.normalize(input, Normalizer.Form.NFD);
        String diacriticStripped = DIACRITICS_PATTERN.matcher(normalizedInput).replaceAll("");
        // Replace additional non-diacritic special characters using a custom mapping
        // ...
        return simplifiedString.toLowerCase();
    }

}

이 방법은 더 넓은 범위의 문자를 고려하여 보다 포괄적인 문자열 단순화 프로세스를 제공합니다.

위 내용은 Java의 유니코드 문자열에서 분음 기호를 효율적으로 제거하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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