2012-05-04 54 views

Respuesta

12

otra versión, esta debe ser la más corta posible

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

Mejor '*' en lugar de '+' para casos como "aa" o cadenas vacías. – steenslag

+0

gracias por la edición Misha, es mejor de hecho – peter

3

Usted puede hacerlo a la vez:

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

Sin duda, más elegante sin embargo.

2

No sé si es más eficiente, pero esto también funciona.

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

También es fácil de hacer:

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

Este un pproach no funcionará si 's' contiene otros espacios en blanco, p. 's =" \ tx "' –

+0

El '\ t' se contabilizaría como un único espacio. Sin embargo, probablemente no haya entendido lo que querías decir; ¿Cómo le gustaría tratar el caso de la pestaña? –

+0

'\ t' debe tratarse como cualquier otro carácter. La pregunta es sobre contar espacios. –

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

también se puede hacer

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