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