program tip

유니 코드 문자열에서 악센트를 제거하는 쉬운 방법?

radiobox 2020. 11. 19. 08:01
반응형

유니 코드 문자열에서 악센트를 제거하는 쉬운 방법?


이 문장을 변경하고 싶습니다.

Et ça sera sa moitié.

받는 사람 :

Et ca sera sa moitie.

Objective-C에서와 같이 Java에서 쉽게 수행 할 수있는 방법이 있습니까?

NSString *str = @"Et ça sera sa moitié.";
NSData *data = [str dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *newStr = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];

마지막으로 Normalizer클래스 를 사용하여 해결했습니다 .

import java.text.Normalizer;

public static String stripAccents(String s) 
{
    s = Normalizer.normalize(s, Normalizer.Form.NFD);
    s = s.replaceAll("[\\p{InCombiningDiacriticalMarks}]", "");
    return s;
}

아마도 가장 쉽고 안전한 방법은 Apache Commons LangStringUtils 에서 사용 하는 것입니다.

StringUtils.stripAccents(String input)

문자열에서 분음 부호 (~ = 악센트)를 제거합니다. 케이스는 변경되지 않습니다. 예를 들어 'à'는 'a'로 대체됩니다. 합자는 그대로 유지됩니다.

StringUtils. stripAccents ()


유일한 차이점은 솔루션에 비해 a +가 아니라 a []를 사용한다는 것입니다. 둘 다 효과가 있다고 생각하지만 여기에도있는 것이 좋습니다.

String normalized = Normalizer.normalize(input, Normalizer.Form.NFD);
String accentRemoved = normalized.replaceAll("\\p{InCombiningDiacriticalMarks}+", "");

Java 6 이상을 사용한다고 가정하면 Normalizer악센트를 분해 할 수있는를 살펴본 다음 정규식을 사용하여 결합 악센트를 제거 할 수 있습니다.

그렇지 않으면을 사용하여 동일한 결과를 얻을 수 있습니다 ICU4J.


코 틀린

fun stripAccents(s: String): String 
{
    var string = Normalizer.normalize(s, Normalizer.Form.NFD)
    string = Regex("\\p{InCombiningDiacriticalMarks}+").replace(string, "")
    return  string
}

감사합니다

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

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

=> stripDiacritics ( "Et Ça sera sa moitié.");

참고 URL : https://stackoverflow.com/questions/15190656/easy-way-to-remove-accents-from-a-unicode-string

반응형