在Ruby中,最简单的方法是在字符串的开头而不是结尾处“扼杀”?
在Ruby中,有时我需要删除字符串开头的新行字符。 目前我所做的就是以下内容。 我想知道最好的方法。 谢谢。
s = "\naaaa\nbbbb" s.sub!(/^\n?/, "")
lstrip
似乎是你想要的(假设应该保留尾随空格):
>> s = "\naaaa\nbbbb" #=> "\naaaa\nbbbb" >> s.lstrip #=> "aaaa\nbbbb"
来自文档:
返回删除了前导空格的str副本。 另请参见String#rstrip和String#strip。
strip
将删除所有尾随空格
s = "\naaaa\nbbbb" s.strip!
小黑客扼杀领先的空白:
str = "\nmy string" chomped_str = str.reverse.chomp.reverse
所以,只是为了澄清一下,有三种方法可以解决这个问题: sub
, lstrip
和lstrip
。
我建议不要使用sub
因为它的可读性稍差,但也因为它的工作原理:通过创建一个inheritance旧字符串的新字符串。 另外,你需要一个非常简单的正则表达式。
那么你就是lstrip
和lstrip
。 最有可能的是,你想要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