分割字符串时,Ruby中的#split和#chars之间有什么区别?
"Hello, World".split("")
#=> ["H", "e", "l", "l", "o", ",", " ", "W", "o", "r", "l", "d"]
"Hello, World".chars
#=> ["H", "e", "l", "l", "o", ",", " ", "W", "o", "r", "l", "d"]
它们都返回一个数组,它们都包含空格和标点符号。
是否存在更适合的情况?
答案 0 :(得分:6)
split
和chars
[...]之间有什么区别?
string.chars
解析基础字节以返回字符串的字符,而string.split('')
使用正则表达式来实现相同的字符。
因此,chars
更快,更强大。它甚至可以在字符串包含无效字符时起作用:
"foo\x80bar".chars
#=> ["f", "o", "o", "\x80", "b", "a", "r"]
如果字符串格式错误(因为正则表达式引擎无法处理它),split
会失败:
"foo\x80bar".split('')
#=> ArgumentError: invalid byte sequence in UTF-8
如果我没有弄错的话,split('')
相当于split(//)
。
是否存在更适合的情况?
split('')
可以在许多教程中找到。我假设这是因为在Ruby 2.x之前,chars
返回了一个枚举器。因此,为了获得一个数组,你必须使用两个方法调用:
string.chars.to_a
或单次致电:(也略短)
string.split('')
如今,您使用chars
(或each_char
用于2.x之前的行为)
答案 1 :(得分:2)
您可以使用拆分根据分隔符将字符串划分为子字符串
例如:
"a/b-c".split('/') will return ["a", "b-c"]
chars 会返回字符串
中的字符数组"a/b-c".chars will return ["a", "/", "b", "-", "c"]
总之,有很多场景,其中一个比另一个更合适。