public class Test {
public static void main(String[] args) {
String str = "2,,3,4,3,,,,,";
String[]flag = str.split(",",-1);
System.out.println(flag.length); //为什么是 5 ???
}
} 默认会去掉串后面的""

解决方案 »

  1.   

    文档里说了
    public String[] split(String regex)
    该方法的作用就像是使用给定的表达式和限制参数 0 来调用两参数 split 方法。因此,所得数组中不包括结尾空字符串。
      

  2.   

    split
    public String[] split(String regex,
                          int limit)根据匹配给定的正则表达式来拆分此字符串。 
    此方法返回的数组包含此字符串的每个子字符串,这些子字符串由另一个匹配给定的表达式的子字符串终止或由字符串结束来终止。数组中的子字符串按它们在此字符串中的顺序排列。如果表达式不匹配输入的任何部分,则结果数组只具有一个元素,即此字符串。 limit 参数控制模式应用的次数,因此影响结果数组的长度。如果该限制 n 大于 0,则模式将被最多应用 n - 1 次,数组的长度将不会大于 n,而且数组的最后项将包含超出最后匹配的定界符的所有输入。如果 n 为非正,则模式将被应用尽可能多的次数,而且数组可以是任意长度。如果 n 为零,则模式将被应用尽可能多的次数,数组可有任何长度,并且结尾空字符串将被丢弃。 例如,字符串 "boo:and:foo" 使用这些参数可生成下列结果: Regex Limit 结果 
    : 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" } 这种形式的方法调用 str.split(regex, n) 产生与以下表达式完全相同的结果: Pattern.compile(regex).split(str, n) 参数:
    regex - 定界正则表达式
    limit - 结果阈值,如上所述 
    返回:
    字符串数组,根据给定正则表达式的匹配来拆分此字符串,从而生成此数组