Java由一个连续的字符分割

时间:2013-02-27 13:26:02

标签: java string split

我有以下示例,以便更好地解释我尝试做的事情:

String text = "a,b,,,,c,,";
String[] split = text.split(",");
for(int i=0;i<split.length;i++){
    System.out.println("I = "+i+" "+split[i]);
}

输出结果为:

I = 0 a

I = 1 b

I = 2 

I = 3 

I = 4 

I = 5 c

但是,我想要的是获得一个大小为8的数组,其中也包含:

I = 6 

I = 7

当然,最后两个元素将是空字符串,但对我来说这是必不可少的。此外,我认为拥有它们是合乎逻辑的。我的意思是,如果我有:

String text = "a,b,,,,c,,d";

结果将是一个大小为8的数组,我不认为这两个例子之间存在很大差异。

2 个答案:

答案 0 :(得分:26)

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

这种行为实际上看起来很棘手,但official documentation实际上解释了(恕我直言,不是很好)。

  

如果n是非正数,那么模式将被应用多次   可能,数组可以有任何长度

text.split(",")的问题在于它等同于text.split(",", 0)。使用0限制,如文档中所述:

  

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

你绝对不希望丢弃空字符串。

答案 1 :(得分:0)

我更喜欢(如果你可以使用外部库):

String[] split = StringUtils.splitPreserveAllTokens(text, ',');

在大多数情况下,StringUtils库往往比默认的java实现更有效率,因为......好吧,嘿,这就是为什么Apache困扰写它的原因。另外,从它的表面来看,很清楚这个分裂在方法名称中做了什么,而乍一看,用-1限制分割的常规字符串可能不是。