0

我想用空格分割一个字符串

irb(main):001:0> input = "dog cat"
=> "dog cat"
irb(main):002:0> output = input.strip.split(/\s+/)
=> ["dog", "cat"]

这很好。但是,我也在 Rails 的控制器中执行此操作,当我提供相同的输入并将输出打印#{output}到我的视图中时,它显示为dogcat而不是["dog", "cat"]. 我真的很困惑这是怎么发生的。有任何想法吗?

@notice = "#{output}"在控制器中使用它来打印它,在我看来我有<%= @notice %>

4

3 回答 3

2

与其在控制器中拆分字符串并将其作为数组发送到您的视图,不如将整个字符串发送到您的视图:

input = "dog cat"
@notice = input

然后,在您的视图中,拆分字符串并将其显示为字符串化数组:

<%= array(@notice.strip.split(/\s+/)).to_s %>
于 2013-06-15T03:11:52.233 回答
0

如果你打印一个字符串数组,你会得到所有字符串连接在一起。irb如果你进入,你会得到同样的东西, print "#{output}"。您需要决定如何格式化它们并以这种方式打印它们,也许使用一个简单的辅助函数。例如,助手可以这样做:

output.each { |s| puts "<p>#{s}</p>" }

或者任何你喜欢的。

于 2013-06-15T03:14:00.447 回答
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会将字符串数组项连接在一起,它们之间没有分隔,这似乎是在您的示例中所做的,您只需将数组呈现为字符串

>> @notice = output
>> # @notice will render as 'dogcat'

相对于:

>> @notice = input.join.split(/\s+/).join ' '
>> # @notice will render as 'dog cat'

你去吧。

于 2013-06-15T05:06:57.050 回答