为什么Java 1.7中的Character.isSpaceChar('\u0009')
返回false?此字符也称为'\ t'或基于字符串的英语:“水平制表符”。根据我的眼睛和Wikipedia一样,这个字符是空白。但Java报告错误!
我还尝试在unicode.org上找到一些打印所有字符类别的列表或表(我的最终目标是在代码点和类别Zi,Zp,Zs *之间找到官方映射)无济于事。< / p>
*实际上现在我再次撒谎。我的最终目标是测试Java计算空白的能力并编写我自己可以实际计算的库(他还应该删除换行符)。或者我应该将这门科学留给着名的\s
模式??
答案 0 :(得分:8)
为什么Java 1.7中的
Character.isSpaceChar('\u0009')
会返回false?
由于isSpaceChar
未检查空白字符,it checks for spaces(Unicode有多个空格字符)。
如果要检查空格,则isWhitespace
(使用 Java 空白空间定义)。
是的,\s
会检查(Java的定义)空白(不仅仅是空格),specifically [ \t\n\x0B\f\r]
。
如果要在程序中使用空白的 Unicode 定义,我不会立即看到Character
方法或预定义正则表达式说它做到这一点的课程。 Unicode联盟提供了大量的code charts,包括空格的this one,因此创建起来应该很简单。不要相信我的话(只是快速阅读图表),但例如:
Pattern p = new Pattern("[ \\u0009-\\u000D\\u0085\\u180E\\u2028\\u2029\\u3000\\u1680\\u2000-\\u2006\\u2008-\\u200A\\u205F\\u00A0\\u2007\\u202F]");
...看起来可能与之匹配。或者是切换这些值的等效函数。
答案 1 :(得分:4)
根据documentation,有三类字符被识别为空格:
标签不适合任何这些类别(HORIZONTAL TABULATION
),因此isSpaceChar
会正确返回false
。
我的最终目标是测试Java估算空白的能力
Character.isWhitespace
功能更具包容性 - 特别是它包含HORIZONTAL TABULATION
类别。也许这就是你应该使用的功能。
答案 2 :(得分:0)
根据Javadoc的说法:
确定指定的字符是否为Unicode空格字符。一个角色是 当且仅当指定为空格字符时才被视为空格字符 是Unicode标准的空格字符。此方法返回true 如果角色的常规类别类型是以下任何一种:
SPACE_SEPARATOR LINE_SEPARATOR PARAGRAPH_SEPARATOR
http://docs.oracle.com/javase/7/docs/api/java/lang/Character.html#isSpaceChar(char)
请检查Unicode,而不是Java。