7
votes

Comment créer des espaces entre tous les quatre entiers de Ruby?

J'essaie de prendre le numéro suivant: xxx

et le convertir en ceci: xxx

Ça n'a pas nécessairement être un entier non plus. En fait, je préférerais que ce soit une chaîne.


1 commentaires

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)?


5 Réponses :


0
votes

boucle à travers chaque chiffre et si l'index de boucle MOD 4 = 0 puis placez un espace.

MODULUS IN RUBY


0 commentaires

14
votes

Vous pouvez utiliser string :: gsub avec une expression régulière: xxx


1 commentaires

C'est probablement le plus rapide que Garrett est plus facile à lire, uniquement parce que la regex requise est plus simple.



14
votes
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'

0 commentaires

2
votes

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"


2 commentaires

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.



4
votes

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? XXX


0 commentaires