2010-09-22 90 views
1

好吧,我有以下的,非常簡單的代碼:循環結束後刪除空行

f = "String1\n\n\nString2\n\n\n" 
f.each_line do |t| 
    t.delete! "\n" 
    puts t.inspect 
end 

它消除了\ n,但留下的空間

"String1" 
nil 
nil 
"String2" 
nil 
nil 

我希望它看起來像這樣:

"String1" 
"String2" 

在此先感謝您的幫助。

+1

不,它不留下任何空格。它返回一個空字符串。你在找什麼結果? – Matchu 2010-09-22 21:46:31

+0

你確定你的確切代碼在輸出中產生'nil',而不是''「'?它不應該這樣做。 – 2011-02-28 00:16:38

回答

3
f.squeeze("\n").each_line do |l| 
    puts l 
end 
+0

優秀的答案!感謝您的幫助 – nomoreflash 2010-09-22 22:00:12

1

您可以通過\nsplit的字符串,然後reject任何空行:

f = "String1\n\n\nString2\n\n\n" 
f.split("\n").reject { |i| i.empty? } 
#=> ["String1", "String2"] 

你會結束了,你可以輸出你想要的數組。

+0

工作得很好。謝謝 – nomoreflash 2010-09-22 22:00:46

+0

你能分裂字符串嗎? – nomoreflash 2010-09-22 22:34:55

1
f = "String1\n\n\nString2\n\n\n" 
f.each_line.collect(&:chomp).reject(&:empty?) 
#=> ["String1", "String2"] 

collect(&:chomp)刪除行結尾。 reject(&:empty?)丟掉所有的空行。

+0

謝謝,一定會有用你的意見。 – nomoreflash 2010-09-22 22:01:41

+0

你很親切。 @ jordinl的回答顯然更好。 – 2010-09-22 22:34:58