【问题标题】:How do I make Java ignore the number of spaces in a string when splitting? [duplicate]java - 如何让Java在拆分时忽略字符串中的空格数? [复制]
【发布时间】:2011-06-19 05:00:03
【问题描述】:

可能重复:
How do I split a string with any whitespace chars as delimiters?

这两条 Python 行都给了我完全相同的列表:

print("1 2 3".split())
print("1  2   3".split())

输出:

['1', '2', '3']
['1', '2', '3']

当 Java '等价物'被拒绝时,我很惊讶:

System.out.println(Arrays.asList("1 2 3".split(" ")));
System.out.println(Arrays.asList("1  2   3".split(" ")));

输出:

[1, 2, 3]
[1, , 2, , , 3]

如何让 Java 忽略空格数?

【问题讨论】:

    标签: java


    【解决方案1】:

    试试这个:

    "1  2  3".split(" +")
    
    // original code, modified:
    System.out.println(Arrays.asList("1 2 3".split(" +")));
    System.out.println(Arrays.asList("1  2   3".split(" +")));
    

    传递给split() 的参数是一个正则表达式,因此您可以指定允许分隔符为一个或多个空格。

    如果您还允许制表符和其他空白字符作为分隔符,请使用“\s”:

    "1  2  3".split("\\s+")
    

    如果您希望在" 1 2 3 " 中使用尾随或标题空格,请使用:

     "  1 2   3   ".replaceAll("(^\\s+|\\s+$)", "").split("\\s+")
    

    【讨论】:

    • 内置的String.trim() 不是比String.replaceAll("(^\\s+|\\s+$)", "") 更快更易读,还是我遗漏了什么?
    • ^^ 没错,但那样他就没有机会炫耀他的 1337 REGEX SKLZ。 ;-)
    • 哈哈 :-) 我以为修剪只是修剪空格字符
    • 工作完美。我没有意识到 split() 没有考虑 &*#&ing 前导空格,所以特别感谢您提到这个问题。
    • @arnaud576875 非常感谢 :)
    【解决方案2】:

    使用简洁的regular expression 怎么样?请注意,根据 Java API 文档,String.split 将采用正则表达式字符串参数。

    "1 2   3".split("\\s+")
    

    【讨论】:

      【解决方案3】:

      我认为应该这样做:

      yourString.trim().split("\\s+");
      

      【讨论】:

        【解决方案4】:

        比起"1 2 3".split(" +"),我更喜欢"1 2 3".split("\s+")。 当您使用 \s 而不是 " " 时,它更具可读性和安全性。

        【讨论】:

          猜你喜欢
          • 2013-04-18
          • 2012-11-09
          • 2015-09-14
          • 2014-03-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多