在分割空格(\ s +)时,第一个结果字符串的第一个索引具有空的第0个字符

时间:2013-10-04 08:52:48

标签: java regex string

我完全不知所措。在文件的第一行上运行line.split("\\s+")时,数组中的第一个值为空char。

在我的equals测试保持失败后,我启动了我的调试器,文件中第一个字符的第一个字符为空(不是空格,而是空的)。

The highlighted row is the empty char.

关于如何发生这种情况的任何解释,加上解决方案都将非常感激。

4 个答案:

答案 0 :(得分:4)

我必须复制第一个字符的内容并查看十六进制代码以确定发生了什么。

该值为ZERO WIDTH NON-BREAKING SPACE (U+FEFF)。由于Java的trim()仅将空格定义为"anything up to and including U+0020 (the usual space character) as whitespace",因此未捕获此字符。

我最终在我的代码中为这个角色添加了一个特殊情况。

答案 1 :(得分:0)

首先删除前导/尾随空格。

line = line.trim();

答案 2 :(得分:0)

如果数组始终为您提供结果,请删除该数组的第一个条目。如果位置0为空或“”或任何值,则可以执行测试。

然后把它变成一个静止的功能而不在视线之内。

答案 3 :(得分:0)

没有什么比“空炭”更好了。

空格定义为:[ \t\n\x0B\f\r] Pattern Javadoc

所以你位置0的角色很可能是一个不可见的角色,不属于上面设置的“空白”。

您可能希望将有问题的字符传递给Character.getNumericValue(char)并查看unicode代码点表以了解它是什么字符。