2012-05-04 6 views

risposta

12

un'altra versione, questo deve essere il più breve possibile

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

Meglio '*' invece di '+' per casi come "aa" o stringhe vuote. – steenslag

+0

grazie per la modifica Misha, è davvero meglio – peter

3

Si potrebbe fare in una sola volta:

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

Decisamente più elegante però.

2

Non so se è più efficiente, ma funziona anche così.

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

E 'anche facile da fare:

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

Questo un pproach non funzionerà se 's' contiene altri spazi bianchi, ad es. 's =" \ tx "' –

+0

Il '\ t' conterebbe come un singolo spazio. Tuttavia, probabilmente non ho capito cosa volevi dire; come vorresti trattare il tab case? –

+0

'\ t' dovrebbe essere considerato come qualsiasi altro personaggio. La domanda riguarda il conteggio degli spazi. –

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

si potrebbe anche fare

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