按连续字符拆分的 Java

2022-09-02 13:07:18

我有以下示例,以更好地解释我想要做什么:

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

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

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

结果将是一个大小为8的数组,我认为2个例子之间没有太大的区别。


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

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

如果 n 为非正数,则模式将尽可能多地应用,并且数组可以具有任何长度

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

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

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


答案 2

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

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

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