java字符串拆分(字符串,整数)

标签 java string split

查看了 split (String, int) 的 API 文档后,我对这两种方法感到很困惑。 , 仍然不确定什么时候会出现空白。

例如

String s="boo:and:foo"
s.split("o", -2);
//the result, according to doc is { "b", "", ":and:f", "", "" }
//why there is only one "" string in the front, while two "" in the back?

经过一些测试后我的想法是只要有连续的匹配,在这种情况下 oo,最后一个尾随的 ""会有一个额外的 "" 是因为字符串结尾前的匹配+连续匹配,导致两个(字符串开头的匹配也会导致前导“”)

需要一些确认。

最佳答案

首先,让我们从检查正常拆分操作的逻辑结果开始。让我们以 one:two:three:four 为例。如果按 : 拆分,您会期望获得以下结果。

one
two
three
four

让我们在 String 的末尾添加另一个分隔符。现在它看起来像 one:two:three:four:。如果我们现在将其拆分,我们将得到相同的结果。这是由于 split(String) 方法定义,它省略了尾随的空字符串。如果您将更多分隔符添加到字符串 one:two:three:four::::: 的末尾,也会发生同样的情况。使用 split(String) 的结果将再次相同,因为与前面的示例一样,它会排除尾随的空字符串元素。

如果你想包含这些元素,那么你可以使用 split(String,int) 函数,如果你提供一个负的 int,它会包含空尾随字符串。来自参数 limit 的方法文档,它是 int

If n is non-positive then the pattern will be applied as many times as possible and the array can have any length. If n is zero then the pattern will be applied as many times as possible, the array can have any length, and trailing empty strings will be discarded.

通过将其作为负数传递,对于字符串 one:two:three:four::,我们将得到以下结果:

one
two
three
four
""
""

现在您的示例也发生了同样的情况。 它确实注意到,单词 foo 会在数组末尾创建两个空的尾随 String 元素,并将包含它们。

关于java字符串拆分(字符串,整数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33865841/

相关文章:

Java多客户端服务器程序

java - 使用java中的运算符将字符串解析为mongodb查询文档

javascript - 如何通过 coffeescript 获取字符串的最后一个字符?

C - 替换字符串中的子字符串

javascript - 按小数分割数字并作为 2 个单独的元素返回

java - 将父类实例对象转换为子类实例对象的行为

java - 如何将 tomcat 服务器在启动时运行的属性写入我的 java logback 日志?

java - 包含纬度的字符串转换为普通数字

python - 使用 split() 在各种标点符号处划分字符串

Perl 在一行中拆分和弹出