我完全感到困惑。line.split("\\s+")
在文件的第一行运行时,数组中的第一个值有一个空字符。
在我的equals测试一直失败后,我启动了我的调试器,文件中单词的第一个字符的第一个字符是空的(不是空格,而是空的)。
任何关于这是如何发生的解释以及解决方案将不胜感激。
我不得不复制第一个字符的内容并查看十六进制代码以弄清楚发生了什么。
值为 a ZERO WIDTH NON-BREAKING SPACE (U+FEFF)
。由于 Java 的 trim() 仅将空格定义为“直到并包括 U+0020(通常的空格字符)作为空格的任何内容”,所以这个字符没有被捕获。
我最终在我的代码中为这个字符添加了一个特殊情况。
首先删除前导/尾随空格。
line = line.trim();
没有什么能比得上“空字符”。
空白定义为:[ \t\n\x0B\f\r]
Pattern Javadoc
所以你在位置 0 的角色很可能是一个不可见的角色,它不属于上面设置的“空白”。
您可能希望将有问题的字符传递给Character.getNumericValue(char)并查看 unicode 代码点表以了解它是什么字符。
如果它总是给你这个结果,只需删除数组的第一个条目。如果位置 0 为 null 或 "" 或任何该值,您可以执行测试。
然后把它变成一个静态函数,看不见,心不在焉。