2015-11-19 81 views
5

乍一看,这看起来似乎是一件容易的事。这可能是,但有几件事让我觉得我可能会错过一些东西。第一个the Java documentation for Character.isWhitespace似乎排除它。什么是和什么是不允许的空格的定义似乎非常确定('当且仅当'),并且第一行说而不是非空格。Java是否将用于Character.isWhitespace的“正常”空间视为空白?

我一直认为一个普通的'空间' - 当你按空格键时你会得到的东西 - 作为non-breaking space

那么它在哪里适合列表?在this question的最高评分答案中,该列表被认为是最终的 - 我是否只是读错了? 另外,this question中的第一个回应的回应似乎有他的怀疑(在不同的情况下)。然而,当我构建一个简单的代码来测试时,它表明正常的空间是一个空白的实例,正如人们所期望的那样。

import static java.lang.Character.isWhitespace; 

public class WhitespaceCheck { 

    public static void main(String[] args) { 

     Character test = ' '; 

     if (Character.isWhitespace(test)) { 
      System.out.println("Is whitespace!");       
     } else { 
      System.out.println("Is not whitespace!"); 
     } 
    } 
} 

所以,我在读的第一项就行了错,是别的地方就行了,或者是列表本身根本就是错误的?

+1

我认为文档_does_表明它包含了,因为'SPACE_SEPARATOR'是'U + 0020'如果我没有弄错 –

+1

我已经在Microsoft Word中使用了非断点空格来防止在单词之间出现换行符我真的想保持在一起。他们使用Ctrl + Shift +空格键输入。他们不应该与通常单独按空格键产生的字符混淆。 –

+0

@a_horse_with_no_name差不多有!正如另一个答案所说,“U + 0020”被包含在SPACE_SEPARATOR覆盖的Unicode类别中。 – Reg

回答

12

你错了;一个不间断的空间可以防止换行。这是一种特殊的空间类型,而不是一个“正常”的空间,它确实允许换行。如果一个“正常”空间是一个不间断的空间,那么当你到达屏幕边缘时,线条将永远不会缠绕,除非每次手动按下返回。

的第一行说:

它是Unicode空格字符(SPACE_SEPARATOR,LINE_SEPARATOR,或PARAGRAPH_SEPARATOR),但不也是一个非中断空格( '\ u00A0', '\ u2007', '\ u202F')

通过SPACE_SEPARATOR覆盖了Unicode空白的名单可以在这里找到:

https://en.wikipedia.org/wiki/Whitespace_character

SPACE_SEPARATOR的文档说它指的是一个Unicode字符的类别,而不是一个特定的字符。标题的“正常”空间(通常由空格创建)包含在此类别中。