当前位置: 首页 > 面试题库 >

处理带有空的final字段的csv字符串时,myString.split(“,”)返回不正确的数组条目数

金宣
2023-03-14
问题内容

我正在处理使用.csv文件读取的特定行,String.split(",")并发现最后一个定界符之后的最后一个空字符串未将其放入该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尾随空字符串将不会被返回 ‘。

解决方案是使用对set 的调用,将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 )还将 正确返回尾随的空条目 。感谢您的加入!



 类似资料:
  • 我将这个字符串从客户端发送到服务器: 该字符串是由服务器打印出来的,所以它是正确的。 “AR”是数据包名称,值是弓箭手将要射出的箭的速度。 这里出什么问题了?

  • 问题内容: 我有一个包含数字的字符串列表,但找不到找到对它们进行排序的好方法。 例如,我得到这样的东西: 用的方法。 我知道我可能需要以某种方式提取数字,然后对列表进行排序,但是我不知道如何以最简单的方式进行操作。 问题答案: 也许您正在寻找人工排序(也称为自然排序): 产量 PS。我已经更改了答案,以使用Toothy的自然排序实现(在此处发表评论),因为它比我的原始答案快得多。 如果您希望使用浮

  • 问题内容: 我正在使用接受json响应的jquery ajax调用: 在我的php后端函数中,我在一个简单的数组上使用json_encode,如下所示: 但是 alert(msg.hello) 为我返回 未定义 。这是怎么了?另外,在我的 console.log中, 我能够得到如下输出: 问题答案: 使用的返回数据:

  • 在我的CentOS7工作站上,我有elasticsearch(ver.5.5.1)服务,按映像:docker.elastic.co/elasticsearch/elasticsearch:5.5.1。 我的工作站上的文件系统类型是XFS。 我有.tar存档文件/usr/share/elasticsearch/data/nodes/0/包含索引结构:(来自kibana的JSON) 开始记录我的JVM

  • 所以我得到了一个xml文件从肥皂服务(我无法控制)。它返回了一个xmlns,这导致了简单的XML问题。我正在运行一个str_replace来解决这个问题,但是现在simpleXML只返回一个空对象。XML结构看起来很好,没有错误,只是一个空对象。 返回:SimpleXMLElement对象() str replace之前的XML源是: 更换后: 任何帮助都将不胜感激,这快把我逼疯了! ----因此

  • 我创建了一个方法来输出字符串。使用split方法和for循环,我将句子中的每个单词添加到字符串数组中,将每个单词的最后两个字母替换为“ed”。现在,我的return语句应该返回每个单词。当我用system.out.print时,它起作用了。当我使用一个return并在我的main方法中调用它时,我得到这样的输出:“[Ljava.lang.String;@1B6235B” 这个错误看起来很简单,但我