19

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

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 的数组,我认为这两个示例之间没有太大区别。

4

2 回答 2

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

这种行为实际上看起来很棘手,但它实际上在官方文档中得到了解释(恕我直言,不是很好)。

如果 n 为非正数,则该模式将被应用尽可能多的次数,并且数组可以具有任意长度

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

如果 n 为零,则该模式将被应用尽可能多的次数,数组可以具有任意长度,并且尾随的空字符串将被丢弃

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

于 2013-02-27T13:27:20.683 回答
0

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

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

在大多数情况下,该StringUtils库往往比默认的 java 实现更高效,因为……嗯,嘿,这就是 Apache 费心编写它的原因。另外,从表面上看,从方法名称中可以清楚地看出这个拆分在做什么,而乍一看,带有 -1 限制的常规字符串拆分可能不是。

于 2013-02-27T13:40:07.043 回答