不确定在这种情况下字符串拆分的实际工作原理

2022-09-03 06:32:49

我没有得到以下内容:

在以下:String

String s = "1234;x;;y;";

如果我这样做:
String[] s2 = s.split(";");

我到了4岁,然后s2.length

s2[0] = "1234";  
s2[1] = "x";  
s2[2] = "";  
s2[3] = "y"; 

但是在字符串中:String s = "1234;x;y;;";

我得到:

s2.length为 3 且

s2[0] = "1234";  
s2[1] = "x";  
s2[2] = "y"; 

?

有什么区别,在后一种情况下我也没有得到4?

更新:
使用不是我期望的行为。
我的意思是最后一个分号是结尾,所以在后一个例子中,我也期望数组的长度-1String4


答案 1

文档中

此方法的工作方式就像调用具有给定表达式和极限参数零的双参数拆分方法一样。因此,尾随空字符串不包括在结果数组中。

更新:

您有五个子字符串,在第二种情况下,它们是 、 、 和 。根据文档,拆分操作产生的所有空子字符串(在末尾)都将被删除。有关详细信息,请查看此处;1234xy

如果 n 为零,则模式将尽可能多地应用,数组可以具有任何长度,并且将丢弃尾随的空字符串。

例如,字符串使用这些参数产生以下结果:boo:and:foo

Regex   Limit   Result
  :       2     { "boo", "and:foo" }
  :       5     { "boo", "and", "foo" }
  :      -2     { "boo", "and", "foo" }
  o       5     { "b", "", ":and:f", "", "" }
  o      -2     { "b", "", ":and:f", "", "" }
  o       0     { "b", "", ":and:f" }   // all the empty substrings at the end were eliminated

答案 2

省略尾随的空字符串。但是,如果需要,有一些方法可以显式包含它们。