如何在Ruby中的每四个整数之间创建空格?

时间:2010-06-16 12:43:56

标签: ruby-on-rails ruby

我想尝试以下数字:

423523420987

并将其转换为:

4235 2342 0987

它也不一定是整数。事实上,我更喜欢它是一个字符串。

5 个答案:

答案 0 :(得分:13)

您可以将String::gsub与正则表达式一起使用:

=> 'abcdefghijkl'.gsub(/.{4}(?=.)/, '\0 ')
'abcd efgh ijkl'

答案 1 :(得分:13)

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

423523420987.to_s.in_groups_of(4)      # => '4235 2342 0987'
423523420987.to_s.in_groups_of(5, '-') # => '42352-34209-87'

答案 2 :(得分:2)

如果您正在寻找填充零,以防少于12个或超过12个数字,这将有助于您:

irb(main):002:0> 423523420987.to_s.scan(/\d{4}/).join(' ')
=> "4235 2342 0987"
irb(main):008:0> ('%d' % 423523420987).scan(/\d{4}/).join(' ')
=> "4235 2342 0987"

答案 3 :(得分:2)

要扩展@Mark Byer的回答和@glenn麦当劳的评论,如果字符串/数字的长度不是4的倍数,你想做什么?

'1234567890'.gsub(/.{4}(?=.)/, '\0 ')
# => "1234 5678 90"

'1234567890'.reverse.gsub(/.{4}(?=.)/, '\0 ').reverse
# => "12 3456 7890"

答案 4 :(得分:0)

循环遍历每个数字,如果循环索引mod 4 = 0,则放置一个空格。

Modulus in Ruby