Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将逗号分隔的字符串拆分为空字符串数组_Java_String_Split - Fatal编程技术网

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

Java 如何将逗号分隔的字符串拆分为空字符串数组,java,string,split,Java,String,Split,我想使用字符串将“,”,“拆分为4个”的数组。拆分() 这是我的密码: String str = ",,,"; String[] tokens = str.split(","); 但是,结果标记是一个空数组:[],而不是我想要的由4个“([”“,”“,”“,”“])组成的数组 我已经测试过稍微更改str: String str = ",,,1"; String[] tokens = str.split(","); 这次结果标记是[“”,“”,“”,“”,“,”1”]

我想使用
字符串将
“,”,“
拆分为4个
的数组。拆分()

这是我的密码:

String str = ",,,";     
String[] tokens = str.split(",");
但是,结果标记是一个空数组:[],而不是我想要的由4个
([”“,”“,”“,”“])
组成的数组

我已经测试过稍微更改
str

String str = ",,,1";        
String[] tokens = str.split(",");
这次结果标记是
[“”,“”,“”,“”,“,”1”]
。这接近我想要的,但我真的不想在进行拆分之前添加这个“1”

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


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

您需要使用重载方法,该方法接受limit参数

String[] tokens = str.split(",", -1);
从(我的)重点:

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


解释:当您不提供limit参数或提供“零”作为限制时,
split()
将丢弃尾随的空字段。当您提供一个正限制参数时,它会将字段数限制到该特定限制。但是当您提供负限制时,
split()
方法允许任何数量的字段,并且不会丢弃尾随的空字段。更清楚地说,请看一看最后有这个片段的源代码(注释是我添加的,并没有出现在实际的源代码中)

注意:如果不提供任何限制参数,则不带限制参数的
split()
方法将调用重载的
split()
方法


还要注意的是,在内部调用。

是否愿意为上述示例解释这一点?如果我不是要求太多,那么“尽可能多地应用”是什么意思?这是如何给我们提供一个空字符串数组的?AnjanBaradwaj,@GIJoe-我已经更新了答案,并提供了更多的解释和源代码。如果您使用的是番石榴,
Splitter.on(“,”).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
public String[] split(String regex) {
    return split(regex, 0);
}