我有一个字符串:
"some text\nandsomemore"
我需要将"\n"从中删除。我尝试过。"some text\nandsomemore".gsub('\n','')
但它不起作用。我该怎么做?谢谢阅读。
你需要在gsub中使用"\n"
而不是'\n'
。这两个引号有不同的功能。
双引号"
允许字符展开和表达式插值,也就是说,它们可以让你使用转义控制字符如\n
来表示它们真正的值,此处为换行符,并且允许使用#{expression}
,因此你可以将变量和任何Ruby表达式嵌入到文本中。
另一方面,单引号'
将字符串视为字面量,所以没有扩展、替换、插值或其他任何操作。
在这种特殊情况下,最好使用.delete
或.tr
字符串方法删除换行符。
strip
方法。" hello ".strip #=> "hello"
"\tgoodbye\r\n".strip #=> "goodbye"
如此处所述。
编辑此问题的原标题与现在不同。我的回答是针对原问题的。
strip
只能够移除字符串开头和结尾的空白字符:http://ruby-doc.org/core-1.9.3/String.html#method-i-strip-21 - myconode如果你想要删除一个字符串,而不是替换它,可以使用String#delete
(或其变异方法String#delete!
),例如:
x = "foo\nfoo"
x.delete!("\n")
x
现在的值为 "foofoo"
在这种情况下,String#delete
比 gsub
更易读,因为你实际上并没有替换字符串。
delete
方法并不具有破坏性,与此处所示不同。它会返回一个新的字符串。 - Brent Dillingham"some text\nandsomemore".tr("\n","")
replace
只是将字符串更改为新的字符串,就像变量赋值一样;而 tr
是逐个字符进行全局查找和替换。 - Mark Thomas使用Ruby的chomp
或strip
函数:
"abcd\n".chomp => "abcd"
"abcd\n".strip => "abcd"
strip
只会移除字符串开头和结尾的空格 - http://ruby-doc.org/core-1.9.3/String.html#method-i-strip-21 - myconode"some text\nandsomemore".split.join
tr
是这个任务的更好选择,但正如我所说,我认为在回答时指出单引号和双引号的区别更好。 - ocodo.delete
或.tr
更好? - Juan José Ramírez.gsub
更快,因为它们执行的操作更少(.delete
很可能是最快的,尽管进行性能分析可以百分之百确认这一点)。 - ocodo