为什么Java String.split()留在空字符串后面?

b_pcakes

当我使用String.split()方法时,为什么有时会得到空字符串?例如,如果我这样做:

"(something)".split("\\W+")  

然后,返回值的第一个元素将是一个空字符串。另外,从文档的例子(如看到这里)没有意义无论是。

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上面显示技巧来消除前导的空字段。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何防止java.lang.String.split()创建前导空字符串?

为什么String.strip()比String.trim()快5倍为空字符串在Java中11

为什么带有包含捕获组的正则表达式的string.split返回以空字符串结尾的数组?

为什么String.match(/ \ d * /)返回空字符串?

Java String.indexOf和空字符串

Java String.valueOf返回空字符串

空字符串的 String.split 行为

为什么将Mono <Void>映射到Mono <String>时会收到一个空字符串?

为什么数组中的前导null值会导致string.Join()返回空字符串?

为什么字符串 'java' 不能添加到 'String Pool'

为什么String引用变量在Java中存储字符串而不是地址?

为什么相同字符串的java String.length与python len()给出不同的结果

Java为什么要接受实际的字符串作为接受String对象的函数的参数?

为什么在Java 8中split有时会在结果数组的开头删除空字符串?

String.Empty和“”(空字符串)有什么区别?

为什么在python中使用re.split()时会得到那些空字符串?

为什么在split()结果中返回空字符串?

为什么即使不存在捕获括号,split 也会返回空字符串?

为什么科特林String.split用正则表达式的字符串不一样的Java?

Java通过添加空字符串将int变量转换为String?

在Java 8中,将Optional.empty中的空字符串的Optional <String>转换为

为什么contains()方法在Java中的非空字符串中找到空字符串

Java:字符串split():我希望它在最后包含空字符串

String.Split()、空字符串和删除指定字符的方法

Groovy:为什么按空格split()对一个空字符串进行返回会返回一个空字符串的列表?

在Python中拆分空字符串时,为什么split()返回空列表,而split('\ n')返回['']?

为什么 s[0] 是 C++ 中空字符串 s 的空字符串?

为什么String.Split()不允许将单个字符串作为参数

如何在String.split()中允许空字符串?