Нормализовать строку, кроме ñ

У меня есть следующий пример кода:

String n = "Péña";
n = Normalizer.normalize(n, Normalizer.Form.NFC);

Как нормализовать строку n, кроме ñ?

И не только эту строку, я делаю форму и хочу оставить только ñ's, а все остальное без диакритических знаков.


person Gerardo    schedule 19.03.2016    source источник
comment
Просто normalize, а затем измените нормализованное n~ на ñ.   -  person Jongware    schedule 19.03.2016


Ответы (1)


Замените все вхождения «ñ» непечатаемым символом «\001», чтобы «Péña» стало «Pé\001a». Затем вызовите Normalizer.normalize(), чтобы разложить "é" на "e" и отдельный диакритический знак. Наконец, удалите диакритические знаки и преобразуйте непечатаемый символ обратно в «ñ».

String partiallyNormalize(String string)
{
    string = string.replace('ñ', '\001');
    string = Normalizer.normalize(string, Normalizer.Form.NFD);
    string = string.replaceAll("[\\p{InCombiningDiacriticalMarks}]", "");
    string = string.replace('\001', 'ñ');
    return string;
}

Вы также можете проголосовать за предпочтительный ответ на Простой способ удалить акценты UTF-8 из строки?, где я узнал, как удалить диакритические знаки.

person Huw Walters    schedule 19.03.2016
comment
Спасибо, это помогло. - person Gerardo; 19.03.2016