在这种情况下,不确定字符串拆分如何实际工作

时间:2012-02-15 09:10:25

标签: java regex string split

我没有得到以下内容:

在以下String中:

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

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

我认为s2.length为4和

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?

更新
使用-1并不是我期待的行为 我的意思是最后一个分号是String的结尾所以在后一个例子中我也期望4作为数组的长度

6 个答案:

答案 0 :(得分:10)

来自docs

  

此方法的工作方式就像通过调用双参数split方法一样   给定的表达式和一个零的限制参数。尾随空   因此,字符串不包含在结果数组中。

<强>更新

您有五个以;分隔的子字符串在第二种情况下,这些子字符串为1234xy 。根据文档,将消除由拆分操作产生的所有空子串(在末尾)。 有关详细信息,请查看here

  

如果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

答案 1 :(得分:4)

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

答案 2 :(得分:3)

来自http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#split(java.lang.String

  

此方法的工作方式就像调用带有给定表达式和limit参数为零的双参数split方法一样。因此,尾随空字符串不包含在结果数组中。

答案 3 :(得分:2)

好问题。如果检查String.split() {{1}}并查看“boo:foo”示例,则可以看到尾部空字符串被省略。

  

此方法的工作方式就像调用带有给定表达式和limit参数为零的双参数split方法一样。因此,尾随空字符串不包含在结果数组中。

     

例如,字符串“boo:and:foo”会产生以下结果:

     

正则表达式结果

     

:{“boo”,“and”,“foo”}

     

o {“b”,“”,“:和:f”}

答案 4 :(得分:1)

这是java中split方法的默认行为,不返回空标记。 ]

s.split(“\;”, - 1);应该返回空令牌

答案 5 :(得分:0)

为什么不先查看文档中的内容。这是链接:

http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#split%28java.lang.String%29

以下是你的答案:

  

因此,结果中不包括尾随空字符串   阵列。