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

我想使用String.split()",,,"拆分为4 ""的数组

这是我的代码:

 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参数,则不带limit参数的split()方法会调用这样的重载split()方法。

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

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