当我使用 String.split() 方法时,为什么有时会得到空字符串?例如,如果我这样做:
"(something)".split("\\W+")
那么返回值的第一个元素将是一个空字符串。此外,文档中的示例(如 here 所示)也没有意义。
Regex Result
: { "boo", "and", "foo" }}
o { "b", "", ":and:f" }}
为什么用“:”作为分隔符,没有空字符串,而用“o”就有空字符串?
最佳答案
与:
"(something)".split("\\W+")
假设分隔符位于字段之间,因此您最终得到的是:
"" "something" "" <- fields
( ) <- delimiters
您可以通过首先修剪字符串以删除任何前导或尾随分隔符来解决此问题,例如:
"(something)".replaceAll("^\\W*","").replaceAll("\\W*$","").split("\\W+")
<小时/>
像这样的东西:
"boo:and:foo".split("o", 0)
你会得到:
"b" "" ":and:f" <- fields
o o <- delimiters
因为您有连续分隔符(当分隔符为":"
时不存在),因此被认为它们之间有一个空字段。
最后由于 foo
而没有尾随空白字段的原因与零限制有关。在这种情况下,尾随(而不是前导)空字段将被删除。
如果您还想删除中间的空字段,则可以使用 "o+"
作为分隔符,因为这会贪婪地吸收连续的 o
字符到单个分隔符中。您还可以使用上面显示的 replaceAll
技巧来删除前导空字段。
关于java - 为什么 java String.split() 留下空字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32756788/