9

文字列の最初と最後のスペースの数を数えるには、次のsようにします。

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

このアプローチでは、sスペースが含まれている場合はエッジケースが必要であり、個別に処理する必要があります。

そうするためのより良い(よりエレガントで効率的な)方法はありますか?

4

5 に答える 5

15

別のバージョン、これは可能な限り最短でなければなりません

s[/\A */].size
s[/ *\z/].size
于 2012-05-04T12:37:25.927 に答える
3

あなたはすぐにそれを行うことができます:

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

しかし、間違いなくこれ以上エレガントではありません。

于 2012-05-04T11:23:29.660 に答える
2

それがより効率的かどうかはわかりませんが、これも同様に機能します。

s.count(' ') - s.lstrip.count(' ')
s.count(' ') - s.rstrip.count(' ')
于 2012-05-04T11:24:45.087 に答える
1
s.split(s.strip).first.size
s.split(s.strip).last.size

あなたもすることができます

beginning_spaces_length , ending_spaces_length = s.split(s.strip).map(&:size) 
于 2012-05-04T11:52:24.810 に答える
0

行うのも簡単です:

beginning =  s.length - s.lstrip.length
ending = s.length - s.rstrip.length
于 2012-05-04T11:32:14.200 に答える