代码之家  ›  专栏  ›  技术社区  ›  Palimondo

为什么在java中不间断空格不是空白字符?

  •  29
  • Palimondo  · 技术社区  · 17 年前

    在寻找从解析的HTML中裁剪不间断空间的正确方法时,我首先偶然发现了Java对 String.trim() 至少有适当的文件记录。我希望避免显式列出符合修剪条件的字符,因此我假设在 性格 班上的人会替我做这项工作。

    Character.isWhitespace(char) 明确排除非中断空间:

    SPACE_SEPARATOR , LINE_SEPARATOR PARAGRAPH_SEPARATOR 但也不是一个不间断的空间 ( '\u00A0' , '\u2007' , '\u202F' ).

    实施 corresponding .NET equivalent

    7 回复  |  直到 4 年前
        1
  •  23
  •   Steve McLeod    17 年前

    Character.isWhitespace(char)

    Java力求100%向后兼容。因此,即使Java团队认为修复他们最初的错误并向Character.isWhitespace(char)返回true的字符集添加不间断空格是件好事,他们也不能这样做,因为几乎可以肯定存在依赖于当前实现的软件,其工作方式与当前实现完全相同。

        2
  •  15
  •   Jesper    16 年前

    由于Java5,还有一个 isSpaceChar(int) 方法这不是你想要的吗?

    确定指定的字符(Unicode代码点)是否为Unicode空格字符。当且仅当Unicode标准将字符指定为空格字符时,才将其视为空格字符。如果角色的常规类别类型为以下任一类型,则此方法返回true:。。。

        3
  •  12
  •   törzsmókus    11 年前

    如上所述, isSpaceChar(int) 将为OP提供答案的轨迹。这似乎是相当谨慎的记录,但这种方法实际上是 useable with regexes .

        "X\u00A0X X".replaceAll("\\p{javaSpaceChar}", "_");
    

        4
  •  7
  •   Matt Poush    17 年前

    我认为Java的实现比.NET更正确。不间断空格本质上是一个看起来像空格的非空白字符。也就是说,如果您有字符串“foo”和“bar”,并在它们之间插入任何传统的空白字符,您将得到一个分词。然而,一个不间断的空间并不能将两者分开。

        5
  •  6
  •   richardtallent    17 年前

    唯一需要特别处理非中断空格的时候,是使用设计用于执行文本换行的代码。

    对于所有其他用途,包括字数计数、修剪和沿字边界进行的通用拆分,应使用不间断空格 还是空白 .

    任何认为不间断空格“看起来像”一个空格但不是一个空格的论点都与Unicode的整体观点相冲突,Unicode是根据字符的含义而不是它们的显示方式来表示字符的。

        6
  •  2
  •   Jason S    17 年前

    它看起来像方法名( isWhitespace

    * It is a Unicode space character (SPACE_SEPARATOR, LINE_SEPARATOR, or PARAGRAPH_SEPARATOR) but is not also a non-breaking space ('\u00A0', '\u2007', '\u202F').
    * It is '\u0009', HORIZONTAL TABULATION.
    * It is '\u000A', LINE FEED.
    * It is '\u000B', VERTICAL TABULATION.
    * It is '\u000C', FORM FEED.
    * It is '\u000D', CARRIAGE RETURN.
    * It is '\u001C', FILE SEPARATOR.
    * It is '\u001D', GROUP SEPARATOR.
    * It is '\u001E', RECORD SEPARATOR.
    * It is '\u001F', UNIT SEPARATOR. 
    

    非中断空间的功能应该是单词之间的可视空间,而不是通过连字号算法分隔。

        7
  •  2
  •   Peter Mortensen Pieter Jan Bonestroo    4 年前

    使用时也要小心 Apache Commons 作用 StringUtils.isBlank() (及相关功能)具有相同的 isWhitespace