如何将逗号分隔的字符串拆分为空字符串数组

2022-09-02 20:12:59

我想使用",,,"""String.split()

这是我的代码:

String str = ",,,";     
String[] tokens = str.split(",");

但是,结果标记是一个空数组:[],而不是我想要的4的数组。""(["","","",""])

我已经测试了一点点改变:str

String str = ",,,1";        
String[] tokens = str.split(",");

这次的结果令牌是 。这接近我想要的,但我真的不想在进行拆分之前添加这个“1”。["","","","1"]

问题基本上是,如果它只包含空元素,它将返回一个空数组。String.split()""

你能帮助解决这个问题吗?


答案 1

您需要使用重载的 String#split(正则表达式,限制)方法,该方法采用 limit 参数。

String[] tokens = str.split(",", -1);

文档(强调我的):

limit 参数控制应用模式的次数,因此会影响结果数组的长度。如果限制 n 大于零,则模式将最多应用 n - 1 次,数组的长度将不大于 n,数组的最后一个条目将包含除最后匹配的分隔符之外的所有输入。如果 n 为非正数,则模式将尽可能多地应用,并且数组可以具有任何长度。如果 n 为零,则模式将尽可能多地应用,数组可以具有任何长度,并且将丢弃尾随的空字符串。


解释:如果未提供限制参数或提供“零”作为限制,则将丢弃尾随的空字段。提供正限制参数时,会将字段数限制在该特定限制内。但是,当您提供负限制时,该方法允许任意数量的字段,并且不会丢弃尾随的空字段。为了更清楚,看看Pattern#split(正则表达式,限制)的源代码,它在最后有这个片段(注释是我添加的,在实际的源代码中不存在)。split()split()

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()

public String[] split(String regex) {
    return split(regex, 0);
}

还要注意,String#split(regex, limit)在内部调用 Pattern#split(regex, limit)。


答案 2