2011-02-01 94 views
7

可能重复:
How do I split a string with any whitespace chars as delimiters?如何让Java在分割时忽略字符串中的空格数?

这两个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忽略的空间有多少?

回答

20

试试这个:

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

是不是内置`String.trim()`不是`String.replaceAll(“(更快,有点更具可读性^ \\ S + | \ \ s + $)“,”“)`或者我错过了什么? – 2011-02-01 11:52:07

0

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

3

我认为这应该这样做:

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