当前位置: 首页 > 知识库问答 >
问题:

为什么Java不能识别这些空白?

农英杰
2023-03-14

有25种类型的空白。character.isWhitespace(char)在下面的代码中显示,25种类型中有4种在Java中不被视为空白。为什么?

public class Main {
    public static void main(String...args){
        char [] whiteSpaces = {'\u0085', '\u00A0', '\u2007', '\u202F'};
        for(char space : whiteSpaces){
            //All spaces are not white spaces in Java.
            System.out.println("[" + space + "] is a white space in Java:" + Character.isWhitespace(space));
        }
    }
}

参考-https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/character.html#IsWhitespace(char)

共有1个答案

谷梁波
2023-03-14

为什么?因为这就是该方法的指定方式。javadoc foriswhitespace列出了与之匹配的代码。您标识的4不在列表中。

我们不能告诉你为什么会这样定义。但是,javadoc所说的一个含义是,'\u00a0''\u2007''\u202f'被排除在外,因为它们是不间断的空白字符。

'\u0085'nel是一个有趣的例子。根据Unicode代码表(见此处的非官方摘要),它不属于一般类别SPACE_SEPARATOR、LINE_SEPARATOR或partearh_separator。(它显示在控件类别中。)

如果您想要一个识别所有Unicode空白字符(即SPACE_SEPARATOR、LINE_SEPARATOR或partearh_separator中的字符)的方法,应该使用isspacechar(javadoc)而不是iswhitespace

注意,Unicode规范不是一个固定的东西。代码的分类,以及“空白”的定义随着时间的推移而演变。每个Java版本实现Unicode规范的特定版本,该版本在发布时是最新的。例如:

  • Java 8实现Unicode 6.2
  • Java 11实现Unicode 10.0.0
  • Java 13实现Unicode 12.1

详细信息在每个Java版本的character类的javadoc中。请注意,给定的Java发行版没有修补以跟踪后续的Unicode发行版。

 类似资料:
  • 对于这个程序,它要求用户输入他们的全名。然后,它通过在名字和姓氏之间的空格处将它们分开来排序名字和姓氏。但是,indexOf()无法识别空格并且只返回-1。为什么?谢谢。 以下是PracticeIt的提示: 编写一个名为process Name的方法,该方法接受控制台的Scanner作为参数,并提示用户输入他或她的全名,然后以相反的顺序打印名称(即姓氏、名字)。您可以假设只会给出名字和姓氏。您应该

  • 为什么会这样?并不是说我绝对需要一个测试方法,我只是好奇而已。当您生成测试方法时,Visual Studio 2012不会给出警告或错误,即使它将无法运行。..

  • 这是一段代码 这将向控制台提供以下结果: 这意味着第一个中的链被识别为空链。 另一方面,Reactor具有以下类MonoEmpty,该类由Mono返回。empty()方法。除此之外,该方法还包括以下内容: 没有发出任何项,但我用方法发出了类型化对象。 对此有何解释?

  • 我用PHP编写了这个脚本: $lang是en。但是当我调用函数如as

  • 在PhpStorm的最新版本(2018年)中,所以它在项目的2017年版本中,我有一个名为<code>User_model的文件。php</code>,并且PhpStorm不将其识别为php文件,而是将其识别成纯文本文件。 但它并不总是如此;我最近才注意到。 我意识到问题出在文件名中()。因为只要我更改文件名(例如,),该文件就会立即被识别为php文件。 是不是(< code>User_model

  • 这是我的代码: 爪哇说: File.java:[92,141]不兼容的类型:java.lang.对象不能转换为捕获#1?扩展java.lang.对象 列141是中的。 为什么这个不会编译?