如何在红宝石中分割x个相等的字符串

时间:2012-08-20 14:40:23

标签: ruby

我在ruby中有一个字符串,如下所示:

str = "AABBCCDDEEFFGGHHIIJJ01020304050607080910"
# 20 letters and 20 numbers in this case

我想把这个分成两半,我可以这样做:

str[0, str.length/2]

str.split(0, str.length/2)

之后,我需要使用chars制作数组,但每个元素的长度为2,如下所示:

["AA", "BB", "CC", "DD", "EE", "FF", "GG", "HH", "II", "JJ"],
[01, 02, 03, 04, 05, 06, 07, 08, 09, 10]

问题是,我找不到简洁的方法来转换这个字符串。我可以做这样的事情

arr = []
while str.length > 0 do
  arr << str[0, 1]
  str[0, 1] = ""
end

但我更想要str.split(2)之类的东西,字符串的长度可能会随时改变。

3 个答案:

答案 0 :(得分:25)

这个怎么样?

str.chars.each_slice(2).map(&:join)

答案 1 :(得分:17)

您可以使用scan方法:

1.9.3p194 :004 > a = 'AABBCCDDEEC'
 => "AABBCCDDEEC" 
1.9.3p194 :005 > a.scan(/.{1,2}/)
 => ["AA", "BB", "CC", "DD", "EE", "C"] 

答案 2 :(得分:-1)

2.1.0 :642 > "d852".scan(/../) => ["d8", "52"]