在拆分时如何让Java忽略字符串中的空格数?

时间:2011-02-01 11:12:54

标签: java

  

可能重复:
  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忽略空格数?

4 个答案:

答案 0 :(得分:22)

试试这个:

"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+")

答案 1 :(得分:4)

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

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

答案 2 :(得分:3)

我认为应该这样做:

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

答案 3 :(得分:0)

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