Подтвердить что ты не робот

Легкий способ удаления аккордов UTF-8 из строки?

Я хочу изменить это предложение:

Et ça sera sa moitié.

To:

Et ca sera sa moitie.

Есть ли простой способ сделать это в Java, как я бы сделал в Objective-C?

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

Ответ 1

Наконец, я решил:

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

Ответ 2

Возможно, самым простым и безопасным способом является использование StringUtils из Apache Commons Lang

StringUtils.stripAccents(String input)

Удаляет диакритические знаки (~ = акценты) из строки. Дело не будет изменено. Например, "а" будет заменено на "а". Обратите внимание, что лигатуры будут оставлены как есть.

StringUtils. stripAccents()

Ответ 3

Предполагая, что вы используете Java 6 или новее, вы можете взглянуть на Normalizer, который может разлагать акценты, а затем использовать регулярное выражение для разделения комбинационных акцентов.

В противном случае вы сможете добиться того же результата, используя ICU4J.

Ответ 4

Я думаю, единственное отличие состоит в том, что я использую +, а не [] по сравнению с решением. Я думаю, что оба они работают, но лучше иметь его здесь.

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

Ответ 5

Благодарю вас

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é." );