在Ruby 1.8.7中,Array("hello\nhello")
为您提供["hello\n", "hello"]
。这样做有两件我不期望的事情:
它将字符串拆分为换行符。我希望它只是给我一个数组,其中我传入的字符串作为单个元素而不修改我传入的数据。
即使您接受在将字符串传递给Array时拆分字符串是合理的,为什么"foo\nbar".split
没有时会保留换行符?
此外:
>> Array.[] "foo\nbar"
=> ["foo\nbar"]
>> Array.[] *"foo\nbar"
=> ["foo\n", "bar"]
答案 0 :(得分:1)
它将字符串拆分为换行符。我希望它只是给我一个数组,其中我传入的字符串作为单个元素而不修改我传入的数据。
这是一项与其他任何公约一样好的公约。例如,Python中的list
构造函数完全不同:
>>> list("foo")
['f', 'o', 'o']
只要它一致,我就不会发现问题。
即使你接受在将字符串传递给Array时拆分字符串是合理的,为什么在
"foo\nbar".split
没有时保留换行符?
我疯狂的猜测(由快速谷歌搜索和TryRuby支持)是字符串的.split
方法这样做,使其成为数组的.join
方法的“逆”操作。
>> "foospambar".split("spam").join("spam")
=> "foospambar"
顺便说一句,我无法在TryRuby上复制您的行为:
>> x = Array("foo\nbar")
=> ["foo\nbar"]
>> Array.[] *"foo\nbar"
=> ["foo\nbar"]
答案 1 :(得分:0)
如果用单引号替换双引号,它按预期工作:
>> Array.[] "foo\nbar"
=> ["foo\nbar"]
>> Array.[] 'foo\nbar'
=> ["foo\\nbar"]
答案 2 :(得分:0)
您可以尝试:
"foo\nbar".split(/w/)
"foo\nbar".split(/^/)
"foo\nbar".split(/$/)
和其他正则表达式。