Вы можете использовать срезы и .join
:
> [str[0..3], str[4..5],str[6..-1]].join("-")
=> "COSO-17-123456"
Обратите внимание, что индекс после первого (между 3 и 4) будет другим, так как вы не вставляете более раннюю вставку первой.т. е. более естественным (для меня в любом случае ...)
Вы будете вставлять по абсолютному индексу исходной строки, а не по относительному индексу, поскольку вставки сделаны.
Если вы хотите вставить при определенных абсолютных значениях индекса, вы также можете использовать ..each_with_index
и управлять поведением символ за символом:
str2 = ""
tgts=[3,5]
str.split("").each_with_index { |c,idx| str2+=c; str2+='-' if tgts.include? idx }
Оба из вышеперечисленных создают новую строку.