在处理带有空的最终字段的csvstring时,myString.split(“,”)将返回不正确的数组条目

我正在使用String.split(",")处理从.csv文件中读取的特定行String.split(",")并发现最后一个分隔符后面的最后一个空string没有进入由split函数创build的数组中。

以下是导致错误的variables值:

 String toSplit = "1,Some Value,31337,Another Value,"; String[] values = toSplit.split( "," ); 

values数组的数量最终less于数组条目的预期数量。 创build的数组是:

 values[0] : '1' values[1] : 'Some Value' values[2] : '31337' values[3] : 'Another Value' 

values[4]抛出一个ArrayIndexOutOfBoundsexception。

我想要的数组是:

 values[0] : '1' values[1] : 'Some Value' values[2] : '31337' values[3] : 'Another Value' values[4] : '' 

一个警告:我正在读取另一个.csv文件创build器的输出,不希望使用string分隔符或将空白字符放入数据为空的地方。 (即不要: toSplit = "1,Some Value,31337,Another Value, " ,结尾有空格)。

这是String.split()中的一个错误,是否有解决方法/另一个选项?

Solutions Collecting From Web of "在处理带有空的最终字段的csvstring时,myString.split(“,”)将返回不正确的数组条目"

当我进入这个问题的时候,发现它! 使用stringObj.split(“,”,numDelimitersExpected),或者像@Supericy指出的那样,stringObj.split (“,”,-1)

根据关于line.split( "," ) (delimiter)的Android文档,对line.split( "," )的调用相当于对line.split( ",", 0 )的调用,第二个参数指向limit ,它将设置' 最大数量的条目 ',并定义' 尾随空串处理 '。 看看stringObj.split(delimiter)的文档,它声明limit == 0尾随空string将不会被返回 ”。

解决方法是使用调用split( ",", limit )limit设置为您希望返回的数组条目数 。 在我的情况下,限制设置为5返回数组

 values[0] : '1' values[1] : 'Some Value' values[2] : '31337' values[3] : 'Another Value' values[4] : '' 

这正是我想要的。 问题解决了。

事实上,即使您的toSplitstring的分隔符数量less于limit ,具有设定limit的调用仍然会创build空的数组条目达到limit 。 例如,使用与我的问题相同的inputstring:

 String toSplit = "1,Some Value,31337,Another Value," 

一个调用String values[] = toSplit.split( ",", 8 )返回数组

 values[0] : '1' values[1] : 'Some Value' values[2] : '31337' values[3] : 'Another Value' values[4] : '' values[5] : '' values[6] : '' values[7] : '' 

整齐!

注意:Oracle的Java String.split(分隔符)与Android文档具有相同的function,因为它们更加简洁。 (:

编辑:作为@Supericy添加, toSplit.split( ",", -1 )也将正确返回尾部空条目 。 感谢您的补充!