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
,使用setlimit
的调用仍将创建小于等于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