我正在尝试在验证期间从字符串中删除所有变音符号(有关更多背景信息,请参见下文)。为此,我使用以下代码:
private static String stripAccents(final String s) {
if(s == null) {
return "";
}
return Normalizer.normalize(s, Normalizer.Form.NFD).replaceAll("[\\p{InCombiningDiacriticalMarks}]", "");
}
我的问题是这不适用于字符 "ø" ,它保持原样。在查看了字符类“InCombiningDiacriticalMarks”之后,我发现了这个问题:What built-in regex character classes are supported Java
这将我带到了所有被认为是变音标记的官方 unicode 列表,这里:https : //www.unicode.org/charts/PDF/U0300.pdf ,代码点 0338 似乎与“ø”匹配得很好。
我是否遗漏了什么,或者 java 中不完全支持字符类“InCombiningDiacriticalMarks”?
至于为什么我需要这个,一些背景:
我正在向外部发送包含斯堪的纳维亚字符的数据,当他们将数据发回时,他们有一个有趣的习惯,即删除甚至替换变音符号(例如 ø 变成 ö)。我试图让他们做对,但就是做不到,而且我无法强迫他们这样做。
因此,为了比较数据以验证发送的内容是我们返回的内容,我必须删除所有变音符号以避免大量误报。