如何将逗号分隔的字符串转换为数组?

84

有没有办法在Ruby中将逗号分隔的字符串转换为数组?例如,如果我有这样一个字符串:

"one,two,three,four"

我该如何将它转换成像这样的数组?

["one", "two", "three", "four"]

为什么要使用“csv”标签?这不是在操作“.csv”文件,而只是一个用逗号分隔的字符串。 - Mark Szymanski
2
CSV代表逗号分隔值。这就是你的字符串。它是一种在字符串格式中存储串行或表格数据的相当标准的方式。它不一定需要直接从文件中读取。 - Lèse majesté
1
@Lèsemajesté:啊,好的,我只是认为CSV只是一个文件。谢谢! - Mark Szymanski
4个回答

167
使用split方法进行操作:
"one,two,three,four".split(',')
# ["one","two","three","four"]

如果你想忽略字符串开头和结尾的空格,请使用:

"one , two , three , four".split(/\s*,\s*/)
# ["one", "two", "three", "four"]

如果你想将多行文本(例如CSV文件)解析为单独的数组:

require "csv"
CSV.parse("one,two\nthree,four")
# [["one","two"],["three","four"]]

是否有与PHP的str_getcsv相当的函数,可以自动处理带引号的CSV、包含(转义)逗号的值、多行CSV等? - Lèse majesté
1
@Lèse majesté:是的,请看我的回答。 - ephemient
“一,二,三,四”这个字符串有没有快速去除空格的方法? - vanboom
7
@vanboom "one, two, three, four".split(/\s*,\s*/). 这里使用了正则表达式进行字符串分割。如果你更喜欢另一种语法,也可以使用 map 方法实现:"one, two, three, four".split(',').map(&:strip)。无论哪种方法,最终的目的都是将字符串按逗号分隔并去除空格。 - Kevin Sylvestre

18
require 'csv'
CSV.parse_line('one,two,three,four') #=> ["one", "two", "three", "four"]

这将为空元素返回nil,例如CSV.parse_line("one,two,,four") #=> ["one", "two", nil, "four"] - Mark Swardstrom

10
>> "one,two,three,four".split ","
=> ["one", "two", "three", "four"]

3
如果您的字符串在任意顺序/数量中有未知数量的前/后空格,则还可以执行以下操作:
'  one  ,   two,three, four   '.split(',').map { | item | item.strip }

#=> ['one', 'two', 'three', 'four']

写了一篇博客文章,供有兴趣的人阅读。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接