foo.split(',').length!='foo'中找到的','的数量?

dfe*_*aro 2 java csv string

也许这是因为它是星期五的结束,我已经找到了解决办法,但这让我很伤心.

我使用Java但是.NET开发人员.

我有一个字符串,我需要用分号逗号分割它.让我们说它在CSV文件中有一行,有200 210列.line.split(',').长度有时是199,其中','的计数将是208或209.我发现以2种不同的方式计数甚至可以确定(使用正则表达式,然后手动循环并检查失去理智后的角色).

我在这里缺少什么是超级明显的面对面的东西?为什么不是foo.split(delim).length == CountOfOccurences(foo,delim),有时只是?

非常感谢

Mat*_*hen 8

首先,一个明显不同.如果有200列,全部带有文本,则有199个逗号.其次,Java默认情况下会丢弃尾随空字符串.您可以通过传递负数作为第二个参数来更改此值.

"foo,,bar,baz,,".split(",")
Run Code Online (Sandbox Code Playgroud)

是:

{foo,,bar,baz}
Run Code Online (Sandbox Code Playgroud)

4个元素的数组.但

"foo,,bar,baz,,".split(",", -1)
Run Code Online (Sandbox Code Playgroud)

是::

{foo,,bar,baz,,}
Run Code Online (Sandbox Code Playgroud)

所有6.

请注意,默认情况下仅删除尾随空字符串.

最后,不要忘记将String编译为正则表达式.这不适用于此,因为,它不是特殊字符,但您应该记住它.


Jos*_*shD 8

发生了一些事情.首先,如果您有三个项目,如a,b,c和逗号分割,则您将有三个条目,比逗号数量多一个.

但是你所处理的可能来自连续的分隔符.:a ,,,, b,c ,,,,,

最后的那些被放弃了.检查java文档中的split函数. http://download.java.net/jdk7/docs/api/java/lang/String.html

  • 为了简化文档,`split(str,-1)`将保留尾随的空字符串. (7认同)