Ruby #split("")vs #chars on string

时间:2017-09-26 22:39:23

标签: ruby string split

分割字符串时,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"]

它们都返回一个数组,它们都包含空格和标点符号。

是否存在更适合的情况?

2 个答案:

答案 0 :(得分:6)

  

splitchars [...]之间有什么区别?

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"]

总之,有很多场景,其中一个比另一个更合适。