在没有正则表达式的情况下每X个字符插入一些东西

时间:2010-07-02 20:41:25

标签: ruby string

this问题中,提问者请求一个每隔x个字符插入一个空格的解决方案。答案都涉及使用正则表达式。如果没有正则表达式,你怎么能实现这个目标呢?

这是我想出来的,但它有点满口。更简洁的解决方案?

string = "12345678123456781234567812345678"
new_string = string.each_char.map.with_index {|c,i| if (i+1) % 8 == 0; "#{c} "; else c; end}.join.strip
=> "12345678 12345678 12345678 12345678"

3 个答案:

答案 0 :(得分:3)

class String
  def in_groups_of(n)
    chars.each_slice(n).map(&:join).join(' ')
  end
end

'12345678123456781234567812345678'.in_groups_of(8)
# => '12345678 12345678 12345678 12345678'

答案 1 :(得分:0)

class Array
  # This method is from
  # The Poignant Guide to Ruby:
  def /(n)
    r = []
    each_with_index do |x, i|
      r << [] if i % n == 0
      r.last << x
    end
    r
  end
end

s = '1234567890'
n = 3
join_str = ' '

(s.split('') / n).map {|x| x.join('') }.join(join_str)
#=> "123 456 789 0"

答案 2 :(得分:-1)

这稍短但需要两行:

new_string = ""
s.split(//).each_slice(8) { |a| new_string += a.join + " " }