如何优雅实现按最大长度3、最小长度2分割字符串?
优雅实现按规则分割字符串
你需要将字符串按每3个字符分割,且最后一段长度至少为2。现有代码功能正常,这里提供两种更简洁优雅的Ruby实现方案:
方案1:利用枚举切片处理(直观易读)
借助Ruby的each_slice方法处理分段,针对总长度模3余1的情况,单独调整最后两段的分割方式:
def split_string(s) segments = s.chars.each_slice(3).map(&:join) if s.size % 3 == 1 segments[-2..-1] = segments[-2..-1].join.chars.each_slice(2).map(&:join) end segments.join(' ') end
方案2:正则表达式一次性匹配(简洁高效)
通过正则直接匹配符合要求的分段模式,无需分支判断也能实现需求:
def split_string(s) s.gsub(/(?<=^(?:.{3})+)(?!.{2}$|$)/, ' ').gsub(/(.{2})(.{2})$/, '\1 \2') end
测试验证
运行以下测试用例,结果均符合预期:
puts split_string("abcdefgh") # 输出: abc def gh puts split_string("abcdefghij") # 输出: abc def gh ij puts split_string("abcd") # 输出: ab cd puts split_string("abcde") # 输出: abc de puts split_string("abc") # 输出: abc
方案优势
- 方案1通过Ruby内置枚举方法实现,逻辑清晰,易于维护和修改;
- 方案2用正则表达式简化代码,无需手动计算字符串索引,代码更紧凑。
内容的提问来源于stack exchange,提问作者youjustmy
相关产品推荐
相关产品推荐

