文字数のカウントを見たいために、対象の文字列を、ある文字数ごとに、区切りの文字列で置き替えた文字列を作成したいとします。

このとき、文字数毎というのは、たとえば5文字毎に区切り文字を入れたいとする場合、元の文字列を□□□□□□□□□□□□□□□□□□□□、区切り文字をとした時、

□□□□■□□□□■□□□□■□□□□■
~~~~|~~~~|~~~~|~~~~
4+1 |4+1 |4+1 |4+1

といった文字列になるようなものを意図としています。

上記の実装例として、Stringクラスをオープンにして、下のようなメソッドを新しく作成したとします:

 class String
   def step_replace(steps, replace_str)
     split_str = self.split('').each_slice(steps)
     range_max = steps - replace_str.length - 1
     split_str.map { |x| x.slice(0..range_max) + [replace_str] }.join
   end
 end

このとき、このstep_replaceは下のような形で利用することが可能です。

 puts ("あいうえお" * 3).step_replace(5, "んん")
 # output: あいうんんあいうんんあいうんん

しかし、このstep_replaceは「文字列をいちいちsplitで配列にしたりしたものを加工している」という点で、冗長であるように感じます。もうすこし簡潔な書き方があるような気がしましたが、如何でしょうか。それともこれ以上簡潔にはならないのでしょうか。