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

Jus*_*ner 18 ruby string

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

s = "\naaaa\nbbbb"
s.sub!(/^\n?/, "")
Run Code Online (Sandbox Code Playgroud)

Mic*_*ohl 22

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

>> s = "\naaaa\nbbbb" #=> "\naaaa\nbbbb"
>> s.lstrip #=> "aaaa\nbbbb"
Run Code Online (Sandbox Code Playgroud)

来自文档:

返回删除了前导空格的str副本.另请参见String#rstrip和String#strip.

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


fl0*_*00r 11

strip 将删除所有尾随空格

s = "\naaaa\nbbbb"
s.strip!
Run Code Online (Sandbox Code Playgroud)

小黑客扼杀领先的空白:

str = "\nmy string"
chomped_str = str.reverse.chomp.reverse
Run Code Online (Sandbox Code Playgroud)

  • @ fl00r但是`lstrip`只能剥离领先的空格:-)我发布了一个答案. (5认同)
  • 只是为了澄清,`String#strip` 和 `String#strip!` 删除了 *leading* 和 *trailing* 空格。这就是它在这种情况下起作用的原因。 (2认同)

Ita*_*dev 11

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

如果寻求后一种功能,可以使用:

'\naaaa\nbbbb'.delete_prefix( "\n" )
Run Code Online (Sandbox Code Playgroud)

与此相反,strip这适用于任意字符,就像chomp.


bry*_*mck 8

所以,只是有点澄清,有三种方法,你可以去一下:sub,reverse.chomp.reverselstrip.

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

所以,那么你到reverse.chomp.reverselstrip.最有可能的,你要lstrip因为它是一个有点快,但要记住的是,strip操作是一样的chomp操作.strip将删除所有主要换行符空格:

"\n  aaa\nbbb".reverse.chomp.reverse  # => "  aaa\nbbb"
"\n  aaa\nbbb".lstrip                 # => "aaa\nbbb"
Run Code Online (Sandbox Code Playgroud)

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

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


Son*_*tos 5

s.sub(/^[\n\r]*/, '')
Run Code Online (Sandbox Code Playgroud)

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