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

tsh*_*ang 9 java

可能重复:
如何将带有任何空格字符的字符串拆分为分隔符?

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

print("1 2 3".split())
print("1  2   3".split())
Run Code Online (Sandbox Code Playgroud)

输出:

['1', '2', '3']
['1', '2', '3']
Run Code Online (Sandbox Code Playgroud)

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

System.out.println(Arrays.asList("1 2 3".split(" ")));
System.out.println(Arrays.asList("1  2   3".split(" ")));
Run Code Online (Sandbox Code Playgroud)

输出:

[1, 2, 3]
[1, , 2, , , 3]
Run Code Online (Sandbox Code Playgroud)

如何让Java忽略空格数?

Arn*_*anc 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(" +")));
Run Code Online (Sandbox Code Playgroud)

传递给的参数split()是Regex,因此您可以指定允许分隔符为一个或多个空格.

我还允许标签和其他空白字符作为分隔符,使用"\ s":

"1  2  3".split("\\s+")
Run Code Online (Sandbox Code Playgroud)

如果你希望有像这样的尾随或标题空格" 1 2 3 ",请使用:

 "  1 2   3   ".replaceAll("(^\\s+|\\s+$)", "").split("\\s+")
Run Code Online (Sandbox Code Playgroud)

  • 是不是内置的`String.trim()`比`String.replaceAll("(^ \\ s + | \\ s + $)","")更快更可读,或者我错过了什么? (3认同)
  • ^^是的,但是他没有机会炫耀他的1337 REGEX SKLZ.;-) (3认同)