Java拆分功能:这是预期的行为吗?

时间:2013-10-24 10:08:16

标签: java split

class Test{
    public static void main(String[] arg){
        String str1="a,,";
        String str2="a,,b";
        System.out.println(str1+" len="+str1.split(",").length);
        System.out.println(str2+" len="+str2.split(",").length);
    }
}

输出

a,, len=1
a,,b len=3

在这两种情况下,部件数量是不是应该是3?

4 个答案:

答案 0 :(得分:0)

不,你所看到的是完全正常的。我能说的最好的是ciopy-paste文档:

  

此方法返回的数组包含此子字符串   由与给定匹配的另一个子字符串终止的字符串   表达式或由字符串的结尾终止。子串   数组中的数字按它们在此字符串中出现的顺序排列。如果   表达式与输入的任何部分都不匹配   array只有一个元素,即这个字符串。

     

limit参数控制模式的次数   应用因此会影响结果数组的长度。如果   限制n大于零,那么模式将应用于   大多数n - 1次,数组的长度不会大于n,并且   数组的最后一个条目将包含除最后一个匹配之外的所有输入   分隔符。如果n是非正数,那么该模式将被应用为   尽可能多次,阵列可以有任何长度。如果n为零   那么模式将尽可能多地应用于数组   可以有任何长度,并且将丢弃尾随空字符串。

您需要阅读文档以更好地了解=)
http://docs.oracle.com/javase/6/docs/api/java/lang/String.html

答案 1 :(得分:0)

根据Java API,这是预期的行为。

  

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

要获得更多控制权,请考虑查看String#split(String, int)方法。

答案 2 :(得分:0)

这个例子在oracle文档中,这解决了所有的困惑。

String“boo:and:foo” 正则表达式“o”

结果{“b”,“”,“:和:f”}

http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split(java.lang.String)

答案 3 :(得分:0)

试试这个。

String str1="a,,";
String str2="a,,b";
System.out.println(str1+" len="+str1.split(",", -1).length);
System.out.println(str2+" len="+str2.split(",", -1).length);