如何拆分一串数量不均匀的重复字符?红宝石

时间:2016-02-03 20:08:56

标签: ruby string split

如果我有"aabbbbccdddeffffgg"之类的字符串,并且我想将字符串拆分为此数组:["aa", "bbbb", "cc", "ddd", "e", "ffff", "gg"],我该如何处理?

我知道string.split/.../<或者你放在那里的时间很长,但它没有考虑到弦是否不均匀。我正在处理的问题的关键是取两个字符串,看看一行中是否有三个字符,另一行中是否有两个字符。我试过了

  `letter_count_1 = {}
    str1.each_char do |let|
       letter_count_1[let] = str1.count(let)
    end`

但是,它给出了字符串中每个字符总量的计数,并且一些输入在多个位置随机化了相同的字母,例如"aabbbacccdba"

那么如何按字符分割字符串?

2 个答案:

答案 0 :(得分:3)

这是一个非正则表达式版本

str = "aabbbbccdddeffffgg"
p str.chars.chunk(&:itself).map{|x|x.last.join} #=> ["aa", "bbbb", "cc", "ddd", "e", "ffff", "gg"]

答案 1 :(得分:2)

您可以使用带有后引用的正则表达式和scan()方法:

str = "aabbbbccdddeffffgg"
groups = []
str.scan(/((.)\2*)/) { |x| groups.push(x[0]) }
之后

groups将如下所示:

["aa", "bbbb", "cc", "ddd", "e", "ffff", "gg"]