Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.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_String_Split - Fatal编程技术网

Ruby 如何在新行之间拆分字符串并保留空行?

Ruby 如何在新行之间拆分字符串并保留空行?,ruby,string,split,Ruby,String,Split,给定ruby代码: "aaaa\nbbbb\n\n".split(/\n/) 这将产生: ["aaaa", "bbbb"] < P> >我希望输出包含由 \n \n>代码>指示的空白行——我希望结果是: ["aaaa", "bbbb", ""] 获得精确结果的最简单/最好的方法是什么?您可以为split的第二个参数提供一个负参数,以避免剥离尾随的空字符串 "aaaa\nbbbb\n\n".split(/\n/, -1) 请注意,与所需的字符串相比,这将为您提供一个额外的空字符串。您可以

给定ruby代码:

"aaaa\nbbbb\n\n".split(/\n/)
这将产生:

["aaaa", "bbbb"] 
< P> >我希望输出包含由<代码> \n \n>代码>指示的空白行——我希望结果是:

["aaaa", "bbbb", ""]

获得精确结果的最简单/最好的方法是什么?

您可以为split的第二个参数提供一个负参数,以避免剥离尾随的空字符串

"aaaa\nbbbb\n\n".split(/\n/, -1)

请注意,与所需的字符串相比,这将为您提供一个额外的空字符串。

您可以使用数字参数,但这有点棘手,因为(IMO)它与我预期的不太一致,而且您可能希望修剪最后一个空字段:

jruby-1.6.7 :020 > "aaaa\nbbbb\n\n".split(/\n/, -1)[0..-2]
 => ["aaaa", "bbbb", ""] 

对于此任务,我建议使用
而不是
拆分
<代码>行将保留尾随换行符,允许您查看所需的空行。使用
chomp
清理:

"aaaa\nbbbb\n\n".lines.map(&:chomp)
[
    [0] "aaaa",
    [1] "bbbb",
    [2] ""
]

其他更复杂的方法有:

"aaaa\nbbbb\n\n".split(/(\n)/).each_slice(2).map{ |ary| ary.join.chomp }
[
    [0] "aaaa",
    [1] "bbbb",
    [2] ""
]
它利用了
split
中的一个捕获组,该捕获组返回被分割的文本,其中插入的文本将被分割<代码>每个_切片然后将元素分组为两个元素子数组
map
获取每个两元素子数组,然后执行
join
chomp

或:

以下是
split
返回的内容:

"aaaa\nbbbb\n\n".split(/(\n)/)
[
    [0] "aaaa",
    [1] "\n",
    [2] "bbbb",
    [3] "\n",
    [4] "",
    [5] "\n"
]

我们看不到这个答案经常使用,但它可能很有用。

我喜欢这个答案。对我来说,它最清楚地表达了我的意图。是的,我也更喜欢它,并且避免了split的数字参数的恶心。@shiva,你不能在MRI中使用
map
,因为它不是一种方法。也许你正在添加一些扩展字符串的东西?作为Ruby的一员已经六年了,你刚刚教了我
方法。太棒了,谢谢。哇,文件里的论点的名字并没有那么明显。谢谢你的指点!
"aaaa\nbbbb\n\n".split(/(\n)/)
[
    [0] "aaaa",
    [1] "\n",
    [2] "bbbb",
    [3] "\n",
    [4] "",
    [5] "\n"
]