Java 当处理带有空最终字段的csv字符串时,myString.split(";,";)返回的数组条目数不正确

Java 当处理带有空最终字段的csv字符串时,myString.split(";,";)返回的数组条目数不正确,java,android,string,split,string-split,Java,Android,String,Split,String Split,我正在使用String.split(“,”处理从.csv文件读取的某一行,发现最后一个分隔符后面的最后一个空字符串没有进入split函数创建的数组 以下是导致错误的变量值: String toSplit = "1,Some Value,31337,Another Value,"; String[] values = toSplit.split( "," ); 值数组的数组项数最终少于预期数。创建的数组是: values[0] : '1' values[1] : 'Some Value' val

我正在使用
String.split(“,”
处理从.csv文件读取的某一行,发现最后一个分隔符后面的最后一个空字符串没有进入
split
函数创建的数组

以下是导致错误的变量值:

String toSplit = "1,Some Value,31337,Another Value,";
String[] values = toSplit.split( "," );
数组的数组项数最终少于预期数。创建的数组是:

values[0] : '1'
values[1] : 'Some Value'
values[2] : '31337'
values[3] : 'Another Value'
使用
值[4]
引发ArrayIndexOutOfBounds异常

我想要的阵列是:

values[0] : '1'
values[1] : 'Some Value'
values[2] : '31337'
values[3] : 'Another Value'
values[4] : ''
一个警告:我正在读取另一个.csv文件创建者的输出,不想使用字符串分隔符,也不想在数据为空的地方抛出“”空白字符。(即,不希望:
toSplit=“1,一些值,31337,另一个值,”
结尾有空格。)


这是String.split()中的错误吗?是否有解决方法/其他选项?

在我输入问题时就解决了!使用stringObj.split(“,”,numDelimitersExpected)或@Supericy指出的stringObj.split(“,”,-1)

根据Android文档中关于调用
line.split(“,”)
相当于调用
line.split(“,”,0)
,第二个参数引用
limit
,它设置了“最大条目数”并定义了“尾随空字符串的处理”。查看文档中的说明,如果
limit==0
尾随的空字符串将不会返回。”

解决方案是使用调用
split(“,”,limit)
,将
limit
设置为您希望返回的数组项的数量。在我的例子中,设置为5的限制返回数组

values[0] : '1'
values[1] : 'Some Value'
values[2] : '31337'
values[3] : 'Another Value'
values[4] : ''
values[0] : '1'
values[1] : 'Some Value'
values[2] : '31337'
values[3] : 'Another Value'
values[4] : ''
values[5] : ''
values[6] : ''
values[7] : ''
这正是我想要的问题已解决。

事实上,即使您的
toSplit
字符串的分隔符少于
limit
,使用set
limit
的调用仍将创建小于等于
limit
的空数组项。例如,使用与我的问题中相同的输入字符串:

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[0] : '1'
values[1] : 'Some Value'
values[2] : '31337'
values[3] : 'Another Value'
values[4] : ''
values[5] : ''
values[6] : ''
values[7] : ''
整洁

注意:Oracle的Java具有与Android docs相同的功能,Android docs的解释更加简洁。(:


编辑:添加@Supericy时,
toSplit.split(“,”,-1)
还将正确返回尾随的空条目。感谢添加!

一分钟内问题和答案就出现了!:d或者,您可以使用
String.split(分隔符,-1)
如果您事先不知道条目的数量。另外,javadoc会告诉您它正在调用
String.split(del,limit)
限制为零;因此,您认为android文档更好的原因是毫无意义的。@优势:使用-1限制很好!是的,我确实读到Oracle文档也解释了该功能,但android文档使用了与Oracle文档完全相同但更简洁的功能封装。注意:我没有te文档是错误的,只是它不够简洁。它们都是完整的。其中一个文档既完整又较短,因此它是成功的。(:谢谢你的输入!干得好。我在PL/SQL中实现“explode”时一直在努力解决这个问题。现在我也有了限制:D