标准化除 ñ 以外的字符串

Normalize a string except ñ

我有以下示例代码:

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

如何规范化字符串 n 除了 ñ

不仅是那个字符串,我正在制作一个表格,我想只保留 ñ's,其他所有内容都没有变音符号。

将所有出现的“ñ”替换为不可打印字符“\001”,因此 "Péña" 变为 "Pé[=18=]1a"。然后调用 Normalizer.normalize() 将“é”分解为 "e" 和一个单独的变音符号。最后去掉变音符号,将不可打印的字符转换回“ñ”。

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

您可能还想为 Easy way to remove UTF-8 accents from a string? 的首选答案投票,我在其中学习了如何删除变音符号。