繁体   English   中英

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

[英]When splitting around whitespace (\s+) the first index of the first resulting string has an empty 0th char

我完全困惑。 在文件的第一行上运行line.split("\\\\s+")时,数组中的第一个值具有空字符。

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

突出显示的行是空字符。

对此的任何解释以及解决方案将不胜感激。

我必须复制第一个字符的内容,并查看十六进制代码以了解正在发生的情况。

ZERO WIDTH NON-BREAKING SPACE (U+FEFF) 由于Java的trim()仅将空格定义为“直到U + 0020(通常的空格字符)为空格的所有内容” ,因此未捕获此字符。

我最终在代码中为此字符添加了一种特殊情况。

首先删除前导/后方空格。

line = line.trim();

如果它总是为您提供结果,则只需删除该数组的第一个条目。 如果位置0为null或“”或任何该值,则可以执行测试。

然后将其转变为静态功能,并使其不为所动。

没有什么比“空字符”更重要了。

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

因此,位置0处的字符很可能是不可见的字符,不属于上面设置的“空白”。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM