2010-09-22 115 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