【发布时间】:2013-06-12 23:20:14
【问题描述】:
我有类似“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 没有帮助(到目前为止)。
注意:最后,我只是想删除那个角色......我可能会找到一种方法来做到这一点,但我真的很想解释为什么它会这样。谢谢
【问题讨论】:
-
字符串是不可变的。是否将方法的返回值赋给了另一个 String 变量?
-
是的。问题是,这些空间不仅仅是“普通空间”。它们可能是不间断的空间或类似的东西。我在这里找到了我的问题的解决方案:stackoverflow.com/questions/1060570/…
replaceAll(\\p{javaSpaceChar}", "_"))但我找不到一些令人满意的解释为什么会这样...... -
java.util.regex.Pattern的 Javadoc 声明\s表示[ \t\n\x0B\f\r],java.lang.Character.isWhitespace的 Javadoc 声明它不包含不间断空格。
标签: java string unicode character