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

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

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

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

strip将删除所有尾随空格

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

小黑客扼杀领先的空白:

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

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

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

那么你就是lstriplstrip 。 最有可能的是,你想要lstrip因为它有点快,但请记住, strip操作与chomp操作不同。 strip将删除所有前导换行符空格:

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

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

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

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

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

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

 s.reverse.chomp.reverse 

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

这应该适合你: s.strip

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

 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