Руби: как подсчитать количество пробелов в начале и конце строки?

подсчитать количество пробелов в начале и конце строки s Я:

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

этот подход требует крайнего случая, когда s содержит пробелы только для обработки отдельно.

есть ли лучший (более элегантный / эффективный) метод для этого?

5 ответов


другая версия, это должно быть самое короткое возможное

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

вы могли бы сделать это сразу:

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

определенно не более элегантный, хотя.


Я не знаю, является ли это более эффективным, но это также работает.

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

s.split(s.strip).first.size
s.split(s.strip).last.size

вы также можете сделать

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

это также легко сделать:

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