繁体   English   中英

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

[英]How to split a comma-delimited string into an array of empty strings

我想使用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

注意:如果你不提供任何限制的说法,该split()没有限制参数的方法调用重载的split()方法是这样

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM