Cha*_*ang 16 java string split
我想要分割",,,"为4的阵列""使用String.split()
这是我的代码:
String str = ",,,";
String[] tokens = str.split(",");
Run Code Online (Sandbox Code Playgroud)
但是,结果标记是一个空数组:[],而不是"" (["","","",""])我想要的数组4 .
我已经测试过改变了str一下:
String str = ",,,1";
String[] tokens = str.split(",");
Run Code Online (Sandbox Code Playgroud)
这次结果令牌是["","","","1"].这接近我想要的,但我真的不想在进行拆分之前添加这个"1".
问题基本上是,String.split()如果它只包含空元素,它将返回一个空数组"".
你能帮忙解决问题吗?
Sud*_*hul 37
您需要使用带有String#split(regex, limit)limit参数的重载方法.
String[] tokens = str.split(",", -1);
Run Code Online (Sandbox Code Playgroud)
从文档(强调我的):
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
Run Code Online (Sandbox Code Playgroud)
注意:如果没有提供任何limit参数,那么split()没有limit参数的split()方法会像这样调用重载方法.
public String[] split(String regex) {
return split(regex, 0);
}
Run Code Online (Sandbox Code Playgroud)
并且还要注意,String#split(regex, limit)内部调用Pattern#split(regex, limit).