Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Java Character.isSpaceChar(char)不将水平制表符计算为空白?_Java_Regex_Tabs_Whitespace - Fatal编程技术网

为什么Java Character.isSpaceChar(char)不将水平制表符计算为空白?

为什么Java Character.isSpaceChar(char)不将水平制表符计算为空白?,java,regex,tabs,whitespace,Java,Regex,Tabs,Whitespace,为什么Java 1.7中的Character.isSpaceChar('\u0009')返回false?此字符也称为“\t”,或在基于字符串的英语中称为“水平制表符”。根据我和其他人的看法,这个字符是空白。但是Java报告是错误的 我还试图找到一些打印所有字符类别的列表或表格(我的最终目标是找到代码点和类别Zi、Zp、Zs*之间的正式映射),但没有结果 *事实上,现在我又撒谎了。我的最终目标是测试Java计算空白的能力,并编写自己的库(他还应该删除换行符)。或者我应该把这门科学留给著名的\s模式

为什么Java 1.7中的
Character.isSpaceChar('\u0009')
返回false?此字符也称为“\t”,或在基于字符串的英语中称为“水平制表符”。根据我和其他人的看法,这个字符空白。但是Java报告是错误的

我还试图找到一些打印所有字符类别的列表或表格(我的最终目标是找到代码点和类别Zi、Zp、Zs*之间的正式映射),但没有结果

*事实上,现在我又撒谎了。我的最终目标是测试Java计算空白的能力,并编写自己的库(他还应该删除换行符)。或者我应该把这门科学留给著名的
\s
模式吗

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

因为
isSpaceChar
不检查空格字符(Unicode有多个空格字符)

如果您想检查空白,有一个(使用Java对空白的定义)

是的,
\s
会检查(Java的定义)空格(不仅仅是空格)

如果您想在程序中使用Unicode定义的空格,我不会立即看到
Character
方法或预定义的正则表达式类这样做。Unicode联盟提供了很多功能,包括空格,所以创建起来应该很简单。不要相信我的话(只要快速阅读图表),例如:

Pattern p = new Pattern("[ \\u0009-\\u000D\\u0085\\u180E\\u2028\\u2029\\u3000\\u1680\\u2000-\\u2006\\u2008-\\u200A\\u205F\\u00A0\\u2007\\u202F]");
…看起来它可能与之匹配。或打开这些值的等效函数。

根据,有三类字符被识别为空格:

  • 空分器
  • 生产线分离器
  • 段落分隔符
选项卡不适合这些类别(它是
水平制表
),因此
isSpaceChar
正确地为其返回
false

我的最终目标是测试Java计算空白的能力


Character.isWhitespace
函数更具包容性,特别是它包括
水平制表
类别。也许这就是您当时应该使用的函数。

根据Javadoc:

确定指定的字符是否为Unicode空格字符。一个角色是 当且仅当指定为 根据Unicode标准,必须是空格字符。此方法返回true 如果角色的常规类别类型为以下任一类型:

空分器 生产线分离器 段落分隔符


因此,请检查Unicode,而不是Java。

您是否有来源(我更喜欢Unicode.org上的子页面链接!)了解为什么水平选项卡不属于
空格分隔符
行分隔符
段落分隔符
?@MartinAndersson是Unicode.org上的一个表,它列举了所有Unicode空格;tab不在其中。答案-因为这是它指定要执行的操作。阅读javadoc。。。在提问之前。告诉stackoverflow的所有访问者,看看这个网站是否仍然存在(之后=),如果你真的想成为一个好的运动,试着在投票前阅读我的整个帖子和下面的评论。现在我要说的是,我已经完成了我那份阅读文档的工作。方法名是
.isWhiteSpaceChar
…?不,不是,那么你的问题是什么呢?也许你应该用Unicode的清晰定义来写一个答案,什么是空格和空格字符,水平制表符在哪里。也许这就是我从一开始就应该表达自己的方式,以避免受到所有大师的抨击,他们自己似乎喜欢在问答网站上闲逛,但不希望其他人使用它们。然而,我真的认为一个更简单的公式化问题将和其他任何问题一样“合法”。底线仍然是,我没有从
isSpaceChar
获得我认为应该得到的输出。我很抱歉!!!=)根据这一点,有比
[\t\n\x0B\f\r]
更多的字符,即空格。根据我在问题中发布的链接,我们得到了更多与更广泛的术语空白相匹配的字符。所以,我想看看Unicode的源代码,知道空格或空白字符是什么。我甚至不能准确地掌握哪些字符属于类别字符。isSpaceChar(char):的API文档列表。@MartinAndersson:是的,但您没有使用Wikipedia文章来告诉您Java API函数将做什么。您可以使用Java API文档进行此操作。:-)如果您想知道根据Unicode定义,字符是否为空白,我不会立即看到
character
方法或预定义的正则表达式类这样做。Unicode联合会提供了很多功能,包括空格,所以创建起来应该很简单。@MartinAndersson:我已经在答案中添加了来自该注释的信息。