9 votes

Ruby : Comment compter le nombre d'espaces au début et à la fin d'une chaîne de caractères ?

Pour compter le nombre d'espaces au début et à la fin d'une chaîne de caractères. s Je le fais :

s.index(/[^ ]/)              # Number of spaces at the beginning of s
s.reverse.index(/[^ ]/)      # Number of spaces at the end of s

Cette approche nécessite le cas limite où s contient uniquement des espaces à traiter séparément.

Existe-t-il une meilleure méthode (plus élégante / efficace) pour le faire ?

15voto

peter Points 15430

Une autre version, celle-ci doit être la plus courte possible.

s[/\A */].size
s[/ *\z/].size

3voto

Mladen Jablanović Points 22082

Vous pourriez le faire en une fois :

_, spaces_at_beginning, spaces_at_end = /^( *).*?( *)$/.match(s).to_a.map(&:length)

Mais il n'est certainement pas plus élégant.

2voto

sub_stantial Points 1284

Je ne sais pas si c'est plus efficace, mais cela fonctionne aussi bien.

s.count(' ') - s.lstrip.count(' ')
s.count(' ') - s.rstrip.count(' ')

1voto

peter Points 15430
s.split(s.strip).first.size
s.split(s.strip).last.size

vous pouvez également faire

beginning_spaces_length , ending_spaces_length = s.split(s.strip).map(&:size)

0voto

Alberto Moriconi Points 1565

C'est également facile à faire :

beginning =  s.length - s.lstrip.length
ending = s.length - s.rstrip.length

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X