在Ruby中,最简单的方法是在字符串的开头而不是结尾处“扼杀”?

时间:2012-02-11 08:13:53

标签: ruby string

在Ruby中,有时我需要删除字符串开头的新行字符。目前,我所做的就是以下内容。我想知道最好的方法。感谢。

s = "\naaaa\nbbbb"
s.sub!(/^\n?/, "")

8 个答案:

答案 0 :(得分:21)

lstrip似乎是您想要的(假设应保留尾随空格):

>> s = "\naaaa\nbbbb" #=> "\naaaa\nbbbb"
>> s.lstrip #=> "aaaa\nbbbb"

来自文档:

  

返回删除前导空格的str副本。也可以看看   String#rstrip和String#strip。

http://ruby-doc.org/core-1.9.3/String.html#method-i-lstrip

答案 1 :(得分:11)

strip将删除所有尾随空格

s = "\naaaa\nbbbb"
s.strip!

小黑客扼杀领先的空白:

str = "\nmy string"
chomped_str = str.reverse.chomp.reverse

答案 2 :(得分:8)

所以,只是为了澄清一下,有三种方法可以解决这个问题:subreverse.chomp.reverselstrip

我建议不要使用sub,因为它的可读性稍差,但也因为它的工作原理:创建一个继承旧字符串的新字符串。另外,你需要一个非常简单的正则表达式。

那么你就到了reverse.chomp.reverselstrip。最有可能的是,您需要lstrip,因为它更快一些,但请记住,strip操作chomp操作相同。 strip将删除所有主要换行符空格:

"\n  aaa\nbbb".reverse.chomp.reverse  # => "  aaa\nbbb"
"\n  aaa\nbbb".lstrip                 # => "aaa\nbbb"

如果您想确保只删除一个字符并且它肯定是换行符,请使用reverse.chomp.reverse解决方案。如果您考虑所有领先的换行符和空白垃圾,请使用lstrip

我可以想到使用正则表达式的一个案例是,如果你在开始时有\r\n个未知数量,并希望修剪它们但是避免触及任何空格。您可以使用循环和更多的String方法进行修剪,但这只会更加丑陋。性能影响并不重要。

答案 3 :(得分:5)

s.sub(/^[\n\r]*/, '')

这会删除前导换行符(回车符和换行符,如chomp中所示),而不是任何空格。

答案 4 :(得分:3)

不确定它是否是最佳方式,但您可以尝试:

s.reverse.chomp.reverse

如果你想留下尾随换行符(如果存在)。

答案 5 :(得分:1)

这应该适合您:s.strip

答案 6 :(得分:1)

准确地说,chomp 不仅可以删除字符串末尾的空格,还可以删除任意字符。

如果需要后一种功能,可以使用:

'\naaaa\nbbbb'.delete_prefix( "\n" )

但是现在您可以像 chomp 一样处理任意字符。

答案 7 :(得分:0)

对空格或非空格字符执行此操作的方法如下:

s = "\naaaa\nbbbb"
s.slice!("\n") # returns "\n" but s also has the first newline removed.
puts s # shows s has the first newline removed