【发布时间】:2019-03-09 21:53:02
【问题描述】:
我正在尝试在验证期间从字符串中删除所有变音符号(有关更多背景信息,请参见下文)。为此,我使用以下代码:
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”?
至于我为什么需要这个,一些背景:
我正在向外部发送包含斯堪的纳维亚字符的数据,当他们将数据发送回来时,他们有一个有趣的习惯,即删除甚至替换变音符号(例如 ø 变为 ö)。我试图让他们做正确的事,但就是做不到,而且我无法强迫他们这样做。
因此,为了比较数据以验证发送的内容是我们返回的内容,我必须删除所有变音符号以避免大量误报。
【问题讨论】:
-
ø 不是带有变音符号的 o - 它是斯堪的纳维亚语言中的不同字母。如果你想这样做,那么你可以修改你的方法来处理这种特殊情况。
-
这实际上是正确的,我没有阅读完整的维基百科文章,确实提到这封信本身可以应用变音符号......我的错!如果你愿意,你可以发布一个我会接受的答案 =)
标签: java pattern-matching diacritics character-class