58

Вопрос по java, diacritics, string, unicode – Простой способ удалить акценты из строки Unicode? [Дубликат]

На этот вопрос уже есть ответ здесь: * Есть ли способ избавиться от акцентов и преобразовать целую строку в обычные буквы? [/questions/3322152/is-there-a-way-to-get-rid-of-accents-and-convert-a-whole-string-to-regular-lette] 10 ...

<span>Это не имеет ничего общего с UTF-8 или любой другой кодировкой символов.</span>

от Jesper

6 ответов

3

Для котлин

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

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

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

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

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

-6

спасибо =>

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 (»Так далееsera sa moitié. " );

116

Наконец-то я'мы решили это с помощью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;
}
71

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

StringUtils.stripAccents(String input)

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

StringUtils.stripAccents ()

Похожие вопросы