gpt4 book ai didi

java - 处理最终字段为空的 csv 字符串时,myString.split( ",") 返回不正确的数组条目数

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:00:03 24 4
gpt4 key购买 nike

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

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

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

values 数组最终少于预期的数组条目数。创建的数组是:

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

使用 values[4] 抛出 ArrayIndexOutOfBounds 异常。

我想要的数组是:

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

一个警告:我正在读取另一个 .csv 文件创建者的输出,不想使用字符串定界符或将 ' ' 空白字符放入数据为空的位置。 (即不希望:toSplit = "1,Some Value,31337,Another Value, " 末尾有空格。)

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

最佳答案

我在输入问题时弄明白了!使用 stringObj.split( ",", numDelimitersExpected ) 或者,正如@Supericy 指出的那样,stringObj.split( ",", -1 )

根据关于 stringObj.split( delimiter ) 的 Android 文档调用 line.split( ",") 等同于调用 line.split( ",", 0 ),第二个参数指向 limit,它设置“最大条目数”并定义“尾随空字符串的处理方式”。查看 stringObj.split( delimiter ) 的文档它声明 limit == 0 'trailing empty strings will not be returned'。

解决方案是调用 split( ",", limit ) 并将 limit 设置为您希望返回的数组条目数 。在我的例子中,限制设置为 5 返回数组

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

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

事实上,即使您的 toSplit 字符串的分隔符少于 limit,设置了 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[5] : ''
values[6] : ''
values[7] : ''

整洁!

注意:Oracle 的 Java String.split( delimiter )具有与 Android 文档相同的功能,因其更简洁的解释而获胜。 (:

编辑:正如@Supericy 所添加的,toSplit.split( ",", -1 ) 也会正确地返回尾随的空条目。感谢补充!

关于java - 处理最终字段为空的 csv 字符串时,myString.split( ",") 返回不正确的数组条目数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16755003/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com