Array.join(“ \ n”)不是用换行符联接的方法吗?


69

我有一个数组。

[1,2,3,4]

我想要一个包含所有用换行符分隔的元素的字符串。

1

2

3

4

但是当我尝试[1,2,3,4].join("\n"),我得到

1\n2\n3\n4

我觉得有一个明显的答案,但我找不到!

Answers:


84

是的,但是如果您打印出该字符串,它将在其中包含换行符:

irb(main):001:0> a = (1..4).to_a
=> [1, 2, 3, 4]
irb(main):002:0> a.join("\n")
=> "1\n2\n3\n4"
irb(main):003:0> puts a.join("\n")
1
2
3
4

这样看来确实可以实现您的期望(?)


56

此处可能发生的一个细微错误是使用单引号而不是双引号。这也具有将换行符呈现为\ n的效果。所以

puts a.join("\n")   # correct

与...不同

puts a.join('\n')   # incorrect

还有为什么是这样一个优秀的写了这里


我已经对答案进行了编辑,以包含指向此功能解释的链接。
2017年

14

万一有人在ERB模板中搜索此功能,以防万一,请尝试以下操作:

(1..5).to_a.join("<br>").html_safe

1
我更喜欢 (1..5).to_a.join("\n"),而且在erb中,您需要添加样式white-space: pre-wrap
fangxing


2

您可能不希望像jay所说的那样使用html_safe,具体取决于上下文。HTML安全可能是安全问题。这取决于原始输入是否实际上是html安全的。HTML安全不应在直接来自用户的输入上调用,通常应在视图之前调用。

https://bibwild.wordpress.com/2013/12/19/you-never-want-to-call-html_safe-in-a-rails-template/

[针对以下评论进行编辑]


不必要。正如博客文章的最后一行所说,除非在该代码构造了字符串并实际上确保它是html安全的之后,否则代码绝对不应在字符串上调用html_safe!。使用html_safe 可以是确定的,只要你明白它做什么和理解,有安全隐患。这样的答案是无济于事的。
zelanix

巧合的是,我现在看到您已经编辑了答案-太好了,我同意您的新工作。请注意,如果您回复评论,我可以更改我的投票。
zelanix

但是,当您现在拥有50个代表时,请注意,将来将其作为评论而不是答案会更合适。
zelanix

0

如果要在换行上打印每个元素,该怎么办。

> a = [1, 2, 3, 4] 
> a.each{|e| puts e}
1
2
3
4
 => [1, 2, 3, 4] 

0

正如上述其他答案所暗示的那样,Rails可能在将代码呈现为html之前转义了您的代码。以下是解决此问题的示例(首先清理输入,以便您可以“安全地”调用html_safe结果):

my_array = [1, 2, 3, 4]
my_array.map{ |i| i.to_s.sanitize }.join("\n").html_safe

sanitize当您不信任输入时才需要。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.