我正在使用 jdk 1.6,我试图在下面的代码中运行,但它没有按预期工作:
String[] arr = ",,,,,".split(",");
但是 arr 的长度显示为 0。我期望 arr 中有 6 个元素,所有元素为“”(空白)值。
谁能解释一下这背后的原因?是否有任何正则表达式可以满足我的要求?
如果你跑
String[] arr = ",,,,,".split(",", -1);
的长度arr
将为 6,因为它还包括开头的空字符串。
它按照String#split()
文档中的说明工作。它清楚地说:
因此,尾随的空字符串不包含在结果数组中。
如果要存储空字符串,请使用重载版本 - String.split(regex, limit)
:
如果 n 为非正数,则该模式将尽可能多地应用,并且数组可以具有任意长度。如果 n 为零,则该模式将被应用尽可能多的次数,数组可以有任意长度,并且尾随的空字符串将被丢弃。
所以,你需要在这里传递一个负数限制:
String[] arr = ",,,,,".split(",", -1);
您可以使用String#split(String regex,int limit)方法。
limit 参数控制应用模式的次数,因此会影响结果数组的长度。如果限制 n 大于零,则模式将最多应用 n - 1 次,数组的长度将不大于 n,并且数组的最后一个条目将包含最后一个匹配分隔符之外的所有输入。如果 n 为非正数,则该模式将尽可能多地应用,并且数组可以具有任意长度。如果 n 为零,则该模式将被应用尽可能多的次数,数组可以有任意长度,并且尾随的空字符串将被丢弃。
String[] arr = ",,,,,".split(",",-1);
此方法的工作方式就像通过使用给定表达式和零限制参数调用双参数拆分方法一样。因此,尾随的空字符串不包含在结果数组中。
运行以下代码:
string str = "A,B,C,D,E,F,G";
string[] arr = str.split(',');
你可以得到结果:
string[0] = "A"
string[1] = "B"
string[2] = "C"
string[3] = "D"
string[4] = "E"
string[5] = "F"
string[6] = "G"
我被排除在“,,,,”之外,两个“,”之间没有空格,因此当您尝试拆分字符串时,没有字符串而是“,”,并且拆分不会将参数计为字符串。您在不计算 String 的参数位置传递的内容。所以它显示长度为0。
更多信息请查看 oracle 文档。
http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#split%28java.lang.String%29