Ruby función para eliminar todos los espacios en blanco?

¿Cuál es la función de Ruby para eliminar todo el espacio en blanco? Algo así como el trim() de php trim() ?

Si solo desea eliminar los espacios en blanco .strip y finales (como el ajuste de PHP), puede utilizar .strip , pero si desea eliminar todos los espacios en blanco, puede usar .gsub(/\s+/, "") lugar.

 s = "I have white space".delete(' ') 

Y para emular la función de trim() de PHP trim() :

 s = " I have leading and trailing white space ".strip 

Respuesta relacionada:

 " clean up my edges ".strip 

devoluciones

 "clean up my edges" 

String#strip – elimina todos los espacios en blanco desde el principio hasta el final.

String#lstrip – solo desde el principio.

String#rstrip – solo desde el final.

String#chomp (sin argumentos) – elimina los separadores de línea ( \n o \r\n ) del final.

String#chop : elimina el último carácter.

String#deletex.delete(" \t\r\n") – borra todos los espacios en blanco listados.

String#gsubx.gsub(/[[:space:]]/, '') – elimina todos los espacios en blanco, incluidos los unicode .


Nota : Todos los métodos anteriores devuelven una nueva cadena en lugar de mutar el original. Si desea cambiar la cadena en su lugar, llame al método correspondiente con ! al final.

 "1232 23 2 23 232 232".delete(' ') => "123223223232232" 

Eliminar funciona más rápido =)

 user system total real gsub, s 0.180000 0.010000 0.190000 (0.193014) gsub, s+ 0.200000 0.000000 0.200000 (0.196408) gsub, space 0.220000 0.000000 0.220000 (0.222711) gsub, join 0.200000 0.000000 0.200000 (0.193478) delete 0.040000 0.000000 0.040000 (0.045157) 

Puedes usar el método squish . Elimina el espacio en blanco en ambos extremos de la cadena y agrupa el espacio en blanco múltiple en un solo espacio.

Por ej.

 " abc ".squish 

dará como resultado:

 "abc" 

Verifique esta referencia de api.rubyonrails.org .

EDITAR: Funciona solo para Ruby on Rails

Es un poco tarde, pero cualquier otra persona que busque en esta página puede estar interesada en esta versión:

Si desea limpiar un trozo de texto preformateado que un usuario puede haber cortado y pegado en su aplicación de alguna manera, pero conserva el espaciado de palabras, intente esto:

 content = " a big nasty chunk of something that's been pasted from a webpage or something and looks like this " content.gsub(/\s+/, " ").strip #=> "a big nasty chunk of something that's been pasted from a webpage or something and looks like this" 

El método .strip de Ruby realiza el equivalente de PHP a trim() .

Para eliminar todos los espacios en blanco:

 " leading trailing ".squeeze(' ').strip => "leading trailing" 

@Tass me hizo saber que mi respuesta original elimina las letras duplicadas en sucesión – ¡YUCK! Desde entonces, he cambiado al método Squish, que es más inteligente sobre tales ocurrencias si se usa el framework Rails.

 require 'active_support/all' " leading trailing ".squish => "leading trailing" " good men ".squish => "good men" 

Cite: http://apidock.com/rails/String/squish

 " Raheem Shaik ".strip 

Eliminará los espacios laterales izquierdo y derecho. Este código nos daría: "Raheem Shaik"

Además, no olvides:

 $ s = " I have white space ".split => ["I", "have", "white", "space"] 

split.join explotará todos los espacios en cualquier lugar de la cadena.

 " abcd ".split.join > "abcd" 

Es fácil de escribir y recordar, por lo que es agradable en la consola y para piratear rápidamente. Posiblemente no sea bienvenido en un código serio, ya que enmascara la intención.

(Basado en el comentario de Piotr en la respuesta de Justicle anterior).

 "asd sda sda sd".gsub(' ', '') => "asdsdasdasd" 

Use gsub o eliminar. La diferencia es que gsub podría eliminar tabs, mientras que eliminar no puede. A veces tiene tabs en los archivos que agregan los editores.

 a = "\tI have some whitespaces.\t" a.gsub!(/\s/, '') #=> "Ihavesomewhitespaces." a.gsub!(/ /, '') #=> "\tIhavesomewhitespaces.\t" a.delete!(" ") #=> "\tIhavesomewhitespaces.\t" a.delete!("/\s/") #=> "\tIhavesomewhitespaces.\t" a.delete!('/\s/') #=> using single quote is unexpected, and you'll get "\tI have ome whitepace.\t" 

Podrías probar esto

 "Some Special Text Values".gsub(/[[:space:]]+/, "") 

using : space: elimina el espacio sin romper junto con el espacio regular.

Para un comportamiento que coincida exactamente con el trim PHP, el método más simple es usar el método String#strip , de esta manera:

 string = " Many have tried; many have failed! " puts "Original [#{string}]:#{string.length}" new_string = string.strip puts "Updated [#{new_string}]:#{new_string.length}" 

Ruby también tiene una versión de edición in situ, llamada String.strip! (tenga en cuenta el ‘!’) final. Esto no requiere crear una copia de la cadena, y puede ser significativamente más rápido para algunos usos:

 string = " Many have tried; many have failed! " puts "Original [#{string}]:#{string.length}" string.strip! puts "Updated [#{string}]:#{string.length}" 

Ambas versiones producen esta salida:

 Original [ Many have tried; many have failed! ]:40 Updated [Many have tried; many have failed!]:34 

¡Creé un punto de referencia para probar el rendimiento de algunos usos básicos de strip y strip! , así como algunas alternativas. La prueba es esta:

 require 'benchmark' string = 'asdfghjkl' Times = 25_000 a = Times.times.map {|n| spaces = ' ' * (1+n/4); "#{spaces}#{spaces}#{string}#{spaces}" } b = Times.times.map {|n| spaces = ' ' * (1+n/4); "#{spaces}#{spaces}#{string}#{spaces}" } c = Times.times.map {|n| spaces = ' ' * (1+n/4); "#{spaces}#{spaces}#{string}#{spaces}" } d = Times.times.map {|n| spaces = ' ' * (1+n/4); "#{spaces}#{spaces}#{string}#{spaces}" } puts RUBY_DESCRIPTION puts "============================================================" puts "Running tests for trimming strings" Benchmark.bm(20) do |x| x.report("s.strip:") { a.each {|s| s = s.strip } } x.report("s.rstrip.lstrip:") { a.each {|s| s = s.rstrip.lstrip } } x.report("s.gsub:") { a.each {|s| s = s.gsub(/^\s+|\s+$/, "") } } x.report("s.sub.sub:") { a.each {|s| s = s.sub(/^\s+/, "").sub(/\s+$/, "") } } x.report("s.strip!") { a.each {|s| s.strip! } } x.report("s.rstrip!.lstrip!:") { b.each {|s| s.rstrip! ; s.lstrip! } } x.report("s.gsub!:") { c.each {|s| s.gsub!(/^\s+|\s+$/, "") } } x.report("s.sub!.sub!:") { d.each {|s| s.sub!(/^\s+/, "") ; s.sub!(/\s+$/, "") } } end 

Estos son los resultados:

 ruby 2.2.5p319 (2016-04-26 revision 54774) [x86_64-darwin14] ============================================================ Running tests for trimming strings user system total real s.strip: 2.690000 0.320000 3.010000 ( 4.048079) s.rstrip.lstrip: 2.790000 0.060000 2.850000 ( 3.110281) s.gsub: 13.060000 5.800000 18.860000 ( 19.264533) s.sub.sub: 9.880000 4.910000 14.790000 ( 14.945006) s.strip! 2.750000 0.080000 2.830000 ( 2.960402) s.rstrip!.lstrip!: 2.670000 0.320000 2.990000 ( 3.221094) s.gsub!: 13.410000 6.490000 19.900000 ( 20.392547) s.sub!.sub!: 10.260000 5.680000 15.940000 ( 16.411131) 

Mi preferencia personal es usar el método .tr

como en:

 string = "this is a string to smash together" string.tr(' ', '') # => "thisisastringtosmashtogether" 

Gracias a @FrankScmitt por señalar que para hacer que esto borre todos los espacios en blanco (no solo espacios) necesitaría escribirlo como tal:

 string = "this is a string with tabs\t and a \nnewline" string.tr(" \n\t", '') # => "thisisastringwithtabsandanewline" 

Intentaba hacer esto porque quería usar un “título” de registros como identificador en la vista, pero los títulos tenían espacios.

una solución es:

 record.value.delete(' ') # Foo Bar -> FooBar 

El método gsub funcionará bien.
El método gsub se puede invocar en una cadena y dice:

 a = "this is a string" a = a.gsub(" ","") puts a #Output: thisisastring 

El método gsub busca cada aparición del primer argumento y lo reemplaza con el segundo argumento. En este caso, reemplazará cada espacio dentro de la cadena y lo eliminará.

Otro ejemplo:

 b = "the white fox has a torn tail" 

Reemplacemos cada aparición de la letra “t” con una “T” mayúscula

 b = b.gsub("t","T") puts b #Output: The whiTe fox has a Torn Tail 

Los .scan() de Ruby’s .scan() y .join() de String también pueden ayudar a vencer el espacio en blanco de la cuerda.

scan(/\w+/).join eliminará todos los espacios y se unirá a la cadena

 string = "White spaces in me".scan(/\w+/).join =>"Whitespacesinme" 

También está eliminando el espacio de la parte izquierda y derecha de la cadena. Significa ltrim , rtrim y trim . En caso de que alguien tenga antecedentes sobre C , FoxPro o Visual Basic y salte en Ruby .

2.1.6 :002 > string = " White spaces in me ".scan(/\w+/).join => "Whitespacesinme" 2.1.6 :003 > string = " White spaces in me".scan(/\w+/).join => "Whitespacesinme" 2.1.6 :004 > string = "White spaces in me ".scan(/\w+/).join => "Whitespacesinme" 2.1.6 :005 >

Yo usaría algo como esto:

 my_string = "Foo bar\nbaz quux" my_string.split.join => "Foobarbazquux" 

Puedes intentar esto:

 "ab cd efg hi ".split.map(&:strip) 

para obtener esto:

 ["ab, "c", "d", "efg", "hi"] 

o si quieres una sola cadena, solo usa:

 "ab cd efg hi ".split.join