欲分割",,,"
为4的阵列,以""
利用String.split()
这是我的代码:
String str = ",,,";
String[] tokens = str.split(",");
但是,结果标记是一个空数组:[],而不是""
(["","","",""])
我想要的4数组。
我已经测试了一下更改str
:
String str = ",,,1";
String[] tokens = str.split(",");
这次的结果标记为["","","","1"]
。这与我想要的接近,但是我真的不想在拆分之前添加此“ 1”。
问题基本上是,String.split()
如果它仅包含空元素,它将返回一个空数组""
。
您能帮助解决问题吗?
您需要使用String#split(regex, limit)
接受limit参数的重载方法。
String[] tokens = str.split(",", -1);
从文档(重点是我的):
limit参数控制应用图案的次数,因此会影响所得数组的长度。如果限制n大于零,则将最多应用n-1次该模式,该数组的长度将不大于n,并且该数组的最后一个条目将包含除最后一个匹配的定界符之外的所有输入。如果n为非正数,则该模式将被尽可能多地应用,并且数组可以具有任何长度。如果n为零,则该模式将被尽可能多地应用,该数组可以具有任何长度,并且尾随的空字符串将被丢弃。
说明:如果不提供limit参数或不提供“零”作为限制,则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
注意:如果不提供任何limit参数,则split()
没有limit参数的split()
方法将像这样调用重载方法。
public String[] split(String regex) {
return split(regex, 0);
}
还要注意,String#split(regex, limit)
内部调用Pattern#split(regex, limit)
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句