如何从Ruby中的字符串中删除前n行?

Tom*_*man 20 ruby

One\n
Two\n
Three\n
Four\n
Run Code Online (Sandbox Code Playgroud)

remove_lines(2)将删除前两行,保留字符串:

Three\n
Four\n
Run Code Online (Sandbox Code Playgroud)

Dig*_*oss 43

s.to_a [2 ..- 1].加入

>> s = "One\nTwo\nThree\nFour\n"
=> "One\nTwo\nThree\nFour\n"
>> s.to_a[2..-1].join
=> "Three\nFour\n"
Run Code Online (Sandbox Code Playgroud)

  • 注意:这在Ruby 1.9中不起作用,您需要在其中执行s.lines.to_a.有关更多信息,请参见http://blog.grayproductions.net/articles/getting_code_ready_for_ruby_19. (35认同)
  • 嘿,我经常在代码高尔夫球中被`.to_a`做挫败,而不是像我想要的那样.最后,我有机会使用它!:-) (2认同)
  • s.lines [2 ..- 1] .join现在是优雅的 (2认同)

And*_*rew 6

s = "One\nTwo\nThree\nFour"

lines = s.lines
> ["One\n", "Two\n", "Three\n", "Four"]

remaining_lines = lines[2..-1]
> ["Three\n", "Four"]

remaining_lines.join
> "Three\nFour"
Run Code Online (Sandbox Code Playgroud)
  • String#lines 将字符串转换为行数组(保留每个字符串末尾的换行符)
  • [2..-1] 指定要返回的行范围,在本例中是第三行到最后一行
  • Array#join 将行重新连接在一起,没有任何空格(但由于行仍然包含换行符,我们不需要分隔符)

在一行中:

s.lines[2..-1].join
Run Code Online (Sandbox Code Playgroud)


Kor*_*tor 5

class String

  def remove_lines(i)
    split("\n")[i..-1].join("\n")
  end

end
Run Code Online (Sandbox Code Playgroud)

打电话"One\nTwo\nThree\nFour\n".remove_lines(2)会导致"Three\nFour".如果需要尾随"\n",则需要相应地扩展此方法.

  • 这个方法不会保持空行吗? (2认同)