【问题标题】:leading whitespace while using string.split()使用 string.split() 时前导空格
【发布时间】:2018-03-07 02:58:06
【问题描述】:

这是我用来分割字符串的代码

str = "1234".split("") ; 
System.out.println(str.length) ; //this gives 5

在 1 之前添加了一个额外的空格,即 str[0]=" " 如何在没有前导空格的情况下拆分此字符串。

【问题讨论】:

  • @Juvanis 不是同一个问题,因为那里的人在他的字符串开头已经有一个空格。我的字符串没有。
  • @PM77-1 试过了。没有运气。
  • 这用 Java 8 打印 4。

标签: java string removing-whitespace


【解决方案1】:

试试这个:

char[] str = "1234".toCharArray();
System.out.println(str.length) ;

【讨论】:

  • 谢谢。这确实有效,但为什么 string.split("") 会在开头添加一个额外的空格。文档中没有指定任何内容。
【解决方案2】:

你实际上并没有得到一个前导空白元素,你得到一个前导空字符串,从打印整个数组可以看出:

System.out.println(java.util.Arrays.toString("1234".split("")));

输出:

[, 1, 2, 3, 4]

这种行为的基本原理是"1234".indexOf("")0。即,分隔符字符串在搜索字符串的开头匹配,因此它在那里创建一个拆分,在返回的数组中给出一个空的初始元素。分隔符也在字符串的末尾匹配,但你不会在那里得到一个额外的空元素,因为(正如String.split 文档所说)“尾随空字符串将被丢弃”。

但是,Java 8 的行为 was changed。现在文档还说:

如果在此字符串的开头存在正宽度匹配,则在结果数组的开头包含一个空的前导子字符串。 开头的零宽度匹配但不会产生这样的空前导子字符串。

(比较 Java 7Java 8String.split 文档。)

因此,在 Java 8 及更高版本上,上述示例的输出为:

[1, 2, 3, 4]

有关更改的更多信息,请参阅:Why in Java 8 split sometimes removes empty strings at start of result array?

无论如何,在这种特殊情况下使用String.split 是多余的。其他答案是正确的,要获得所有字符的数组,您应该使用str.toCharArray(),这样更快更直接。如果您确实需要单字符字符串数组而不是字符数组,请参阅:Split string into array of character strings

【讨论】:

    【解决方案3】:

    使用 toCharArray() 代替......

    【讨论】:

    • 您好,欢迎来到 Stackoverflow!请阅读How to Answer a Question Guide。您能否详细说明您的回答?很难遵循您的建议。谢谢!
    • 哈,不,我不是 VB 程序员,我是 Java、C/C++ 程序员。我只是说你的答案并不完整。或许你可以举一个更简洁的例子,而不仅仅是告诉他使用 toCharArray() 方法。请记住,其他人将来会出现并看到您的答案,这不仅仅是为了 OP。
    【解决方案4】:

    如果要在 "" 上拆分,则应使用字符串的 toCharArray 方法。

    String str = "1234";
    System.out.println(str.toCharArray().length);
    

    【讨论】:

      【解决方案5】:

      如果您使用的是 Java 7 或更低版本,请使用:

      "1234".split("(?!^)")
      

      【讨论】:

        【解决方案6】:

        我会这样做:

        str = "1 2 3 4".split(" ");  
        

        当然,除非有特定原因必须是“1234”

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多