Ruby中如何将字符串"33255563"转换为连续相同字符分组数组?
如何在Ruby中将字符串转换为连续相同字符组成的数组
当然可以实现这个需求!Ruby提供了好几种简洁的方式来完成这个任务,下面给你介绍两种最常用的方法:
方法一:使用scan配合正则表达式
String#scan方法可以根据正则表达式匹配字符串中的所有子串,正好适合我们提取连续相同字符的场景。
具体代码如下:
input_str = "33255563" output_array = input_str.scan(/(.)\1*/).flatten puts output_array.inspect # => ["33", "2", "555", "6", "3"]
正则表达式解释:
(.):捕获任意单个字符,把它存到第一个捕获组里\1*:匹配前面捕获组里的字符零次或多次,这样就能把连续相同的字符都归为一组
scan返回的是二维数组(每个匹配结果是一个包含捕获组的数组),所以我们用flatten把它转成一维数组,就得到了想要的结果。
方法二:使用chunk方法
Ruby的Enumerable#chunk方法专门用来对连续相同的元素进行分组,字符串可以被当作字符数组处理,所以也能用上这个方法:
input_str = "33255563" output_array = input_str.chunk { |char| char }.map { |_, char_group| char_group.join } puts output_array.inspect # => ["33", "2", "555", "6", "3"]
代码解释:
chunk { |char| char }:按照字符本身进行分组,把连续相同的字符分到同一组map { |_, char_group| char_group.join }:遍历每个分组,把分组里的字符数组拼接成字符串,最终得到目标数组
这两种方法都能完美解决你的问题,选哪个都可以,看你个人习惯啦~
内容的提问来源于stack exchange,提问作者Matheus
相关产品推荐
相关产品推荐

