在Ruby中,有時我需要刪除字符串開始處的新行字符。目前我所做的就像下面這樣。我想知道做到這一點的最佳方式。謝謝。在Ruby中,在字符串的開頭而不是結尾處「chomp」最簡單的方法是什麼?
s = "\naaaa\nbbbb"
s.sub!(/^\n?/, "")
在Ruby中,有時我需要刪除字符串開始處的新行字符。目前我所做的就像下面這樣。我想知道做到這一點的最佳方式。謝謝。在Ruby中,在字符串的開頭而不是結尾處「chomp」最簡單的方法是什麼?
s = "\naaaa\nbbbb"
s.sub!(/^\n?/, "")
lstrip
似乎是你想要的(假設尾隨空白應保持):
>> s = "\naaaa\nbbbb" #=> "\naaaa\nbbbb"
>> s.lstrip #=> "aaaa\nbbbb"
從文檔:
返回海峽的副本是空白去除。另請參閱 String#rstrip和String#條。
恥辱我:) ! – fl00r 2012-02-11 10:08:15
這應該適合你:s.strip
。
strip
將刪除所有尾隨空白
s = "\naaaa\nbbbb"
s.strip!
小的黑客的Chomp前導空格:
str = "\nmy string"
chomped_str = str.reverse.chomp.reverse
不知道這是最好的方式,但你可以嘗試:
s.reverse.chomp.reverse
如果你想離開尾隨的換行符(如果存在)。
注意:如果你將一個參數傳遞給'chomp',你也想反轉:'s.reverse.chomp(x.reverse).reverse' – 0xtobit 2018-01-25 21:38:37
s.sub(/^[\n\r]*/, '')
這消除導致換行符(回車和換行,如在chomp),而不是任何空白。
對於「字符串開始」,「\ A」或許比「開始行」的「^」更合適。但是上面的表達式仍然可以按照要求工作,因爲'sub'和星號一起確保它僅匹配第一行。 – 2014-01-26 20:37:15
所以,只是稍微澄清一下,有三種方法可以解決這個問題: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
s和\n
s,並且想要修剪它們,但不要觸及任何空格。你可以使用循環和更多的字符串方法來修剪,但它會更醜。性能影響並不重要。
我想說,如果他只想刪除一個換行符,那麼他現在使用'sub!'(就地版本)的解決方案比'reverse.chomp.reverse'好很多。 – 2012-02-11 18:16:24
爲空白或者非空白字符做到這一點的方法是這樣的:
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
你想留在原地尾隨換行符(在行尾)? – 2012-02-11 08:23:10