Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 从字符串#拆分返回的零长度字符串_Ruby - Fatal编程技术网

Ruby 从字符串#拆分返回的零长度字符串

Ruby 从字符串#拆分返回的零长度字符串,ruby,Ruby,在Ruby 1.9.3(可能是更早的版本,我不确定)中,我试图弄明白为什么Ruby的String#split方法会给我某些结果。我得到的结果似乎与我预期的相反。下面是一个例子: "abcabc".split("b") #=> ["a", "ca", "c"] "abcabc".split("a") #=> ["", "bc", "bc"] "abcabc".split("c") #=> ["ab", "ab"] 这里,第一个示例返回的正是我所期望的结果 但在第二个示例中,我不

在Ruby 1.9.3(可能是更早的版本,我不确定)中,我试图弄明白为什么Ruby的String#split方法会给我某些结果。我得到的结果似乎与我预期的相反。下面是一个例子:

"abcabc".split("b") #=> ["a", "ca", "c"]
"abcabc".split("a") #=> ["", "bc", "bc"]
"abcabc".split("c") #=> ["ab", "ab"]
这里,第一个示例返回的正是我所期望的结果

但在第二个示例中,我不明白为什么#split返回一个零长度字符串作为返回数组的第一个值。原因何在?这是我所期望的:

"abcabc".split("a") #=> ["bc", "bc"]
沿着这条线,为什么在第三个示例中没有返回尾随的零长度字符串?如果第二个示例返回一个长度为零的字符串作为第一个值,那么最后一个示例应该返回与最后一个值相同的值

启发我,我在这里错过了什么

编辑:深入研究后,我意识到为什么这是默认行为,为什么我的想法是完全错误的。例如,如果我们要浏览一个CSV文件,在每一列上拆分,我们的数据将被丢弃,因为空的前导列将被忽略

另外,需要注意的是,这个问题不仅仅与Ruby有关——我了解到许多其他语言的行为方式都完全相同。当我知道这一点时,我只是在使用Ruby

"abcabc".split("b") #=> ["a", "ca", "c"]
"abcabc".split("a") #=> ["", "bc", "bc"]
"abcabc".split("c") #=> ["ab", "ab"]
假设你用逗号分开。你期望他们有什么样的行为 拆分(“,”)?在“a”上拆分没有什么不同。对于第三个示例,
split
默认情况下会忽略后面的空格。

表示

如果省略limit参数,则尾部的null字段将被抑制

因此,如果我们以你为例:

 "abcabc".split("a") #=> ["bc", "bc"]
我们包括一个极限值:

 "abcabc".split("a", -1)  #=> ["ab", "ab", ""]

您将获得预期的行为。

在逗号上拆分,我想我将预期
[“bc”,“bc”]
的结果。但是开始考虑CSV文件是如何工作的,完全忽略前导的空字符串会导致不准确的结果,所以我现在理解“为什么”。你不应该用逗号分割CSV。它会在任何带有嵌入逗号的带引号的字符串上给您带来糟糕的结果。相反,使用Ruby内置的CSV模块,这将做正确的事情。@tin-man:明白了,我只是泛泛而谈。谢谢