ruby - ¿Por qué la tira no elimina el espacio en blanco líder?
strip ruby-2.0 (4)
¿De dónde viene la cadena " Bagsværd"
?
Es probable que el carácter de espacio al comienzo de la cadena no sea un espacio "normal", sino un espacio sin interrupciones (U + 00A0):
2.0.0p353 :001 > " Bagsværd".strip
=> "Bagsværd"
2.0.0p353 :002 > "/u00a0Bagsværd".strip
=> " Bagsværd"
Podría eliminarlo con gsub
lugar de gsub
:
2.0.0p353 :003 > "/u00a0Bagsværd".gsub(//A/p{Space}*/, '''')
=> "Bagsværd"
Esto utiliza el anclaje /A
y la propiedad de carácter /p{Space}
para emular lstrip
. Para eliminar tanto los espacios en blanco iniciales como los finales, use:
2.0.0p353 :007 > "/u00a0Bagsværd/u00a0".gsub(//A/p{Space}*|/p{Space}*/z/, '''')
=> "Bagsværd"
Intenté strip
el espacio en blanco inicial de una cadena:
" Bagsværd".strip # => " Bagsværd"
Espero que devuelva "Bagsværd"
lugar.
El primer carácter en tu cadena no es el espacio en blanco
" Bagsværd".bytes
[194, 160, 66, 97, 103, 115, 118, 195, 166, 114, 100]
" Bagsværd".chars[0].ord
=> 160
Este es el espacio U+00A0
sin descanso. Tenga en cuenta que podría decir esto porque la forma editable de la pregunta conserva el carácter (mientras que cualquier persona que intente cortar y pegar desde la publicación SO procesada no podrá replicar su problema)
Es el primer carácter un espacio o algo más, por ejemplo, / u00af ( espacio sin interrupciones )
Esto podría dar el mismo resultado:
#encoding: utf-8
puts " Bagsværd".strip #Bagsværd
a = "/u00A0Bagsværd"
puts a # Bagsværd
puts a.strip # Bagsværd
#Maybe the example works not, when the code is posted/taken via cut+paste
b = '' Bagsværd''
p a == b #true
Puedes comprobar lo que tienes con:
a = "/u00A0Bagsværd"
b = '' Bagsværd''
p a.codepoints.to_a #[160, 66, 97, 103, 115, 118, 230, 114, 100]
p b.codepoints.to_a #[32, 66, 97, 103, 115, 118, 230, 114, 100]
La forma más probable en que la strip
no está eliminando un espacio, es cuando realmente no es un espacio, sino que es un espacio que no se rompe.
Prueba esto en tu máquina:
# encoding: utf-8
" Bagsværd".chars.map(&:ord)
En la mía, usando Ruby 2.0.0p353:
# => [160, 66, 97, 103, 115, 118, 230, 114, 100]