0
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

4 回答 4

0

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

字符串 "boo:and:foo" 正则表达式 "o"

结果 { "b", "", ":and:f" }

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

于 2013-10-24T10:13:01.653 回答
0

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

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

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

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

于 2013-10-24T10:10:41.137 回答
0

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

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

要获得更多控制,请考虑研究该String#split(String, int)方法。

于 2013-10-24T10:11:45.940 回答
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);
于 2013-10-24T10:14:23.103 回答