在寻找一种适当的方法来从解析的HTML中修剪出不间断的空间时,我首先偶然发现了Java的spartan定义,String.trim()该定义至少已正确记录。我想避免显式列出适合修剪的字符,因此我假设在Character类上使用Unicode支持的方法将对我有用。
那就是我发现Character.isWhitespace(char)明确排除不间断空格的时候:
它是Unicode空格字符(SPACE_SEPARATOR,LINE_SEPARATOR或PARAGRAPH_SEPARATOR),但也不是不间断空格(’\u00A0’,’\u2007’或’\u202F’)。
这是为什么?
Character.isWhitespace(char)老了。真的很老 Java早期所做的许多事情都遵循C的约定和实现。
十多年来,现在,这些事情似乎是错误的。考虑一下它可以证明事情发生了多大的变化,即使在Java的早期和.NET的早期之间也是如此。
Java努力做到100%向后兼容。因此,即使Java团队认为更正最初的错误并在从Character.isWhitespace(char)返回true的字符集中添加不间断空格也很好,但他们却不能这样做,因为几乎可以肯定存在的软件完全依赖于当前的实现方式。