我有以下示例,以便更好地解释我尝试做的事情:
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的数组,我不认为这两个例子之间存在很大差异。
答案 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限制分割的常规字符串可能不是。