J'essaie de prendre le numéro suivant: et le convertir en ceci: p> Ça n'a pas nécessairement être un entier non plus. En fait, je préférerais que ce soit une chaîne. P> p>
5 Réponses :
boucle à travers chaque chiffre et si l'index de boucle MOD 4 = 0 puis placez un espace. P>
Vous pouvez utiliser string :: gsub code > strong>
avec une expression régulière:
C'est probablement le plus rapide que Garrett est plus facile à lire, uniquement parce que la regex requise est plus simple.
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'
Si vous recherchez des zéros matelassés au cas où vous auriez moins de 12 numéros ou plus de 12 numéros, cela vous aidera à sortir:
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 Byers 'est probablement le plus rapide, c'est la plus jolie, à mon avis.
Le peu de «zéros matelassés» ne s'applique plus après la modification.
Pour développer la réponse de @mark Byer et le commentaire de @glenn McDonald, que voulez-vous faire si la longueur de votre chaîne / numéro n'est pas un multiple de 4?
Vos numéros sont-ils garantis pour se casser uniformément en groupes de 4? Sinon, voulez-vous que le groupe <4 au début (12 3456 7890) ou la fin (1234 5678 90)?