我想使用",,,"
""
拆分为4 String.split()
的数组
这是我的代码:
String str = ",,,";
String[] tokens = str.split(",");
但是,结果标记是一个空数组:[],而不是我想要的4 ""
(["","","",""])
数组。
我已经测试过稍微更改str
:
String str = ",,,1";
String[] tokens = str.split(",");
这次结果令牌为["","","","1"]
。这接近我想要的,但我真的不想添加这个" 1"在做分裂之前。
问题基本上是,String.split()
如果只包含空元素""
,将返回一个空数组。
你能帮忙解决问题吗?
答案 0 :(得分:36)
您需要使用带有limit参数的重载String#split(regex, limit)
方法。
String[] tokens = str.split(",", -1);
来自docs(强调我的):
limit参数控制模式的应用次数,因此会影响结果数组的长度。如果限制n大于零,那么模式将最多应用n - 1次,数组的长度将不大于n,并且数组的最后一个条目将包含除最后一个匹配分隔符之外的所有输入。 如果n是非正数,那么模式将被应用尽可能多次,并且数组可以具有任何长度。如果n为零,则模式将被应用尽可能多的数组,数组可以有任何长度,尾随空字符串将被丢弃。
说明:当您未提供限制参数或提供“零”作为限制时,split()
会丢弃尾随空字段。当您提供正限制参数时,它会将字段数限制为该特定限制。但是当您提供负限制时,split()
方法允许任意数量的字段,也不会丢弃尾随的空字段。为了更清楚,请查看最后包含此代码段的Pattern#split(regex, limit)
的源代码(我添加了注释,但实际源代码中没有这些注释)。
if (limit == 0) // When zero or no arg is given
while (resultSize > 0 && matchList.get(resultSize-1).equals("")) // if trailing entries are blank
resultSize--; // remove them out
注意:如果您不提供任何限制参数,则不带限制参数的split()
方法会调用重载的split()
方法like this。
public String[] split(String regex) {
return split(regex, 0);
}
另请注意,String#split(regex, limit)
在内部调用Pattern#split(regex, limit)
。