java - 为什么 java String.split() 留下空字符串?

标签 java regex string split

当我使用 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/

相关文章:

java - 在 odata4j 库中扩展 olink

Java GeoTools - 从 SRID 获取 CRS

使用百分号的Java属性文件 "%"

java - 我应该更改模式以验证什么?

string - LabVIEW 字符串输出

PHP 将附加数据传递给回调

java - 将 Ckfinder 与 ckeditor 和 JSP 结合使用

python - 用正则表达式去除标点符号 - python

ios - 正则表达式捕获 { 字符之前的所有文本 - Objective C

regex - 为匹配中的每一行添加前缀的正则表达式