【发布时间】:2011-05-10 14:24:33
【问题描述】:
我有这个字符串:
"some text\nandsomemore"
我需要从中删除“\n”。我试过了
"some text\nandsomemore".gsub('\n','')
但它不起作用。我该怎么做?感谢阅读。
【问题讨论】:
我有这个字符串:
"some text\nandsomemore"
我需要从中删除“\n”。我试过了
"some text\nandsomemore".gsub('\n','')
但它不起作用。我该怎么做?感谢阅读。
【问题讨论】:
您需要在 gsub 中使用 "\n" 而不是 '\n'。不同的引号表现不同。
双引号" 允许字符扩展和表达式插值,即。它们允许您使用转义的控制字符,如 \n 来表示它们的真实值,在本例中为 newline,并允许使用 #{expression},因此您可以编织变量,而且,几乎任何将您喜欢的 ruby 表达式添加到文本中。
而另一方面,单引号 ' 按字面意思处理字符串,因此没有扩展、替换、插值或其他内容。
在这种特殊情况下,最好使用.delete 或.tr String 方法来删除换行符。
【讨论】:
tr 是完成这项任务的更好选择,但正如我所说,我认为最好在回答时指出单引号和双引号的区别。
.delete 或.tr 更好?
.gsub 更快,因为他们做的更少(.delete 很可能是最快的,尽管性能分析可以 100% 确认这一点。)
您不需要正则表达式。使用tr:
"some text\nandsomemore".tr("\n","")
【讨论】:
replace 只是将字符串更改为新字符串,例如变量赋值;而tr 是逐个字符的全局查找和替换。
当你想删除一个字符串而不是替换它时,你可以使用String#delete(或它的mutator等价物String#delete!),例如:
x = "foo\nfoo"
x.delete!("\n")
x 现在等于“foofoo”
在这种特定情况下,String#delete 比 gsub 更具可读性,因为您实际上并没有用任何东西替换字符串。
【讨论】:
delete 没有破坏性,如此处所示。它返回一个新字符串。
如果您希望或不介意删除字符串中的所有前导和尾随空格,您可以使用strip 方法。
" hello ".strip #=> "hello"
"\tgoodbye\r\n".strip #=> "goodbye"
如上所述here。
edit 此问题的原始标题不同。我的回答是针对最初的问题。
【讨论】:
strip 只删除前导和尾随空格:ruby-doc.org/core-1.9.3/String.html#method-i-strip-21
使用来自 Ruby 的 chomp 或 strip 函数:
"abcd\n".chomp => "abcd"
"abcd\n".strip => "abcd"
【讨论】:
strip 仅删除前导和尾随空格 - ruby-doc.org/core-1.9.3/String.html#method-i-strip-21