一尘不染

为什么Java中的不间断空格不是空格字符?

javascript

在寻找一种适当的方法来从解析的HTML中修剪出不间断的空间时,我首先偶然发现了Java的spartan定义,String.trim()该定义至少已正确记录。我想避免显式列出适合修剪的字符,因此我假设在Character类上使用Unicode支持的方法将对我有用。

那就是我发现Character.isWhitespace(char)明确排除不间断空格的时候:

它是Unicode空格字符(SPACE_SEPARATOR,LINE_SEPARATOR或PARAGRAPH_SEPARATOR),但也不是不间断空格(’\u00A0’,’\u2007’或’\u202F’)。

这是为什么?


阅读 600

收藏
2020-09-22

共1个答案

一尘不染

Character.isWhitespace(char)老了。真的很老 Java早期所做的许多事情都遵循C的约定和实现。

十多年来,现在,这些事情似乎是错误的。考虑一下它可以证明事情发生了多大的变化,即使在Java的早期和.NET的早期之间也是如此。

Java努力做到100%向后兼容。因此,即使Java团队认为更正最初的错误并在从Character.isWhitespace(char)返回true的字符集中添加不间断空格也很好,但他们却不能这样做,因为几乎可以肯定存在的软件完全依赖于当前的实现方式。

2020-09-22