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?
答案 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);