为什么SPACE_SEPARATOR类型的char不能被识别为空格?

时间:2013-06-17 03:49:02

标签: java string unicode character

我有类似“12 345 678”的字符串,我想删除空格(因为转换为int)。所以我按照惯例做了myString.replaceAll("\\s", "");,但真是一个惊喜!它什么都没做,空间还在那里。

当我进一步调查时,我发现这个空格字符的类型为Character.SPACE_SEPARATOR(Character.getType(myString.charAt(<positionOfSpaceChar>)))。

我没有得到的是为什么不是这个不经意的空格字符(来自Unicode类别Zs http://www.fileformat.info/info/unicode/category/Zs/list.htm)被识别为空格(甚至不是Character.isWhitespace(char))。

通过java api阅读没有帮助(到目前为止)。

注意:最后,我只想删除那个角色......我可能会找到一种方法,但我真的很想解释为什么它会像这样表现。感谢

1 个答案:

答案 0 :(得分:8)

您的问题是\s被定义为[ \t\n\x0B\f\r]。您要使用的是\p{javaWhitespace},其定义为java.lang.Character.isWhitespace()为真的所有字符。

在这种情况下不确定它是否适用,但请注意,不间断的空格不被视为空格。 Character.SPACE_SEPARATOR通常是空格,但不包含'\ u00A0','\ u2007','\ u202F',因为它们不会中断。如果要包含不间断空格,请在\p{javaWhitespace}之外明确包含这3个字符。这有点痛苦,但就是这样。

实际上,在您转换为int的特定情况下,我建议:

myString.replaceAll("\\D", "");,

去掉所有不是数字的东西。