Я пытаюсь взять следующее число:
423523420987
И преобразуйте его в это:
4235 2342 0987
Это должно не обязательно быть целое число также. На самом деле я предпочел бы, чтобы это было строкой.
Вы можете использовать String :: gsub
с регулярным выражением:
=> 'abcdefghijkl'.gsub(/.{4}(?=.)/, '\0 ')
'abcd efgh ijkl'
Если вы ищете заполненные нули в случае, если у вас меньше 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"
Чтобы расширить ответ @Mark Byer и комментарий @glenn mcdonald, что вы хотите сделать, если длина вашей строки / числа не кратна 4?
'1234567890'.gsub(/.{4}(?=.)/, '\0 ')
# => "1234 5678 90"
'1234567890'.reverse.gsub(/.{4}(?=.)/, '\0 ').reverse
# => "12 3456 7890"
Прокрутите каждую цифру, и если индекс цикла mod 4 = 0, поместите Космос.
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'