Java拆分字符串无法按预期工作

时间:2013-07-15 12:29:19

标签: java regex

我正在使用jdk 1.6,我试图在代码下运行,但它没有按预期工作:

String[] arr = ",,,,,".split(",");

但是arr的长度显示为0。 我希望arr中的6个元素包含所有元素“”(空白)值。

任何人都能解释一下这背后的原因吗? 是否有任何正则表达式可以满足我的要求?

5 个答案:

答案 0 :(得分:5)

如果你跑

String[] arr = ",,,,,".split(",", -1);

arr的长度为6,因为它在开头还包含空字符串。

答案 1 :(得分:4)

它按String#split()文档中的说明工作。它清楚地说:

  

因此,结尾的空字符串不包含在结果数组中。

如果要存储空字符串,请使用重载版本 - String.split(regex, limit)

  

如果n是非正数,那么模式将被应用尽可能多次,并且数组可以具有任何长度。如果n为零,那么模式将被应用尽可能多次,数组可以具有任何长度,并且尾随空字符串将被丢弃。

因此,您需要在此处传递否定限额

String[] arr = ",,,,,".split(",", -1);

答案 2 :(得分:3)

您可以使用String#split(String regex,int limit)方法。

  

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

String[] arr = ",,,,,".split(",",-1);

根据String#split()

的文档
  

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

答案 3 :(得分: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"

答案 4 :(得分:0)

我除了“,,,,,”两个“,”之间没有空格,所以当你试图拆分字符串时,没有字符串而是','和split不将参数计为串。你在参数中传递的是不计算String的内容。所以它的长度为0。

有关详细信息,请查看oracle文档。

http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#split%28java.lang.String%29