当字符与前一个字符不同时,在ruby中拆分字符串

时间:2017-11-21 08:23:10

标签: arrays ruby string

我想在角色改变时拆分字符串。

例如,"aabbbc226%%*"应该拆分为这样的数组["aa", "bbb", "c", "22", "6", "%%", "*"]

这是我现在拥有的东西

def split_when_char_change(str)
   array = Array.new
   chars = str.split('')
   chars.each { |c|
     array.push c
   }
   array
end

split_when_char_change( “aabbbc226 %% *”)

我收到此输出:["a", "a", "b", "b", "b", "c", "2", "2", "6", "%", "%", "*"]这是错误的。

如何获得我想要的数组?

2 个答案:

答案 0 :(得分:4)

以下是使用 chunk map join 的单行内容:

"aabbbc226%%*".chars.chunk(&:itself).map{|_,c| c.join}
# => ["aa", "bbb", "c", "22", "6", "%%", "*"]

答案 1 :(得分:1)

"aabbbc226%%*".scan(/((.)\2*)/).to_h.keys
# => ["aa", "bbb", "c", "22", "6", "%%", "*"]

"aabbbc226%%*".scan(/((.)\2*)/).map(&:first)
# => ["aa", "bbb", "c", "22", "6", "%%", "*"]