为什么Java Character.isSpaceChar(char)不将水平制表符视为空格?

Mar*_*son -4 java regex whitespace tabs

为什么Character.isSpaceChar('\u0009')Java 1.7会返回false?此字符也称为'\ t'或基于字符串的英语:"水平制表符".根据我的眼睛和维基百科,这个角色空白.但Java报告错误!

我还试图在unicode.org上找到一些列表或表格来打印所有字符类别(我的最终目标是找到代码点和类别之间的官方映射Zi,Zp,Zs*)无济于事.

*其实现在我再次撒谎.我的最终目标是测试Java计算空白的能力并编写我自己可以实际计算的库(他还应该删除换行符).或者我应该把这种科学留给着名的\s模式?

T.J*_*der 8

为什么Character.isSpaceChar('\u0009')Java 1.7会返回false?

因为isSpaceChar不检查空格字符,所以它会检查空格(Unicode有多个空格字符).

如果你想检查空格,那就是isWhitespace(使用空白的Java定义).

是的,\s确实检查(Java的定义)的空白(不只是空格),具体[ \t\n\x0B\f\r].

如果你想在你的程序中使用空格的Unicode定义,我不会立即看到一个Character方法或预定义的正则表达式类,它说它会这样做.Unicode联盟提供了很多代码图表,包括这个用于空白的代码图表,因此创建它应该很简单.不要相信我的话(只是快速阅读图表),但例如:

Pattern p = new Pattern("[ \\u0009-\\u000D\\u0085\\u180E\\u2028\\u2029\\u3000\\u1680\\u2000-\\u2006\\u2008-\\u200A\\u205F\\u00A0\\u2007\\u202F]");
Run Code Online (Sandbox Code Playgroud)

......看起来它可能会匹配它.或者是切换这些值的等效功能.

  • @MartinAndersson:是的,但你没有使用维基百科文章来告诉你Java API函数会做什么.您可以使用Java API文档.:-)如果你想根据Unicode定义知道字符是否是空格,我不会立即看到`Character`方法或预定义的正则表达式类,它说它会这样做.Unicode联盟提供了很多[代码表](http://www.unicode.org/charts/uca/),包括[这一个](http://unicode.org/charts/uca/chart_Whitespace.html)对于空白,所以创建起来应该很简单. (2认同)