我想用空格分割字符串
irb(main):001:0> input = "dog cat"
=> "dog cat"
irb(main):002:0> output = input.strip.split(/\s+/)
=> ["dog", "cat"]
这很好。但是,我也是在Rails的控制器中执行此操作,当我提供相同的输入,并将输出#{output}
打印到我的视图中时,它显示为dogcat
而不是{{ 1}}。我真的很困惑如何发生这种情况。有什么想法吗?
我在控制器中使用["dog", "cat"]
进行打印,在我看来,我有@notice = "#{output}"
答案 0 :(得分:2)
不是在控制器中拆分字符串并将其作为数组发送到视图,而是将整个字符串发送到视图中:
input = "dog cat"
@notice = input
然后,在您的视图中,拆分字符串并将其显示为字符串化数组:
<%= array(@notice.strip.split(/\s+/)).to_s %>
答案 1 :(得分:0)
如果你打印一个字符串数组,你将把所有字符串连接在一起。如果您已输入irb
,则会在print "#{output}"
中获得相同的内容。您需要决定如何格式化它们并以这种方式打印它们,也许使用简单的辅助函数。例如,帮助程序可以执行:
output.each { |s| puts "<p>#{s}</p>" }
或者你喜欢什么。
答案 2 :(得分:0)
继续您的示例代码:
>> input = "dog cat"
=> "dog cat"
>> output = input.strip.split /\s+/
=> ["dog", "cat"]
>> joined = output.join ' '
=> "dog cat"
请记住,Ruby有几个帮助程序,如%w
和%W
,可以让您将字符串转换为单词数组。如果你从一个单词数组开始,每个单词可能在其单个项目之前和之后都有空格,你可以尝试这样的事情:
>> # `input` is an array of words that was populated Somewhere Else
>> # `input` has the initial value [" dog ", "cat\n", "\r tribble\t"]
>> output = input.join.split /\s+/
=> ["dog", "cat", "tribble"]
>> joined = output.join ' '
=> "dog cat tribble"
在没有任何参数的情况下调用String#join
会将stringish数组项与 no 之间的分隔连接在一起,并且在您的示例中,您只需将数组呈现为字符串即可
>> @notice = output
>> # @notice will render as 'dogcat'
相反:
>> @notice = input.join.split(/\s+/).join ' '
>> # @notice will render as 'dog cat'
然后你去。