2011-08-18 6 views

Respuesta

140

la salida rieles squish método:

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

+6

El más simple y la solución más elegante. Gracias. Pero hay una cosa: este método está definido en Rails, por lo que solo funcionará en las aplicaciones de Rails, afortunadamente ese es mi caso. – Kreeki

+5

genial :) nunca escuché al respecto – fl00r

+2

Como Kreeki dijo un poco incierto, este es un método de Rails, no un método de Ruby. –

16

La forma más sencilla sería probablemente

s = "Hello, my\n  name is Michael." 
s.split.join(' ') #=> "Hello, my name is Michael." 
+0

Oh, eso es complicado, pero funciona como un amuleto. – Kreeki

3

Uso String#gsub:

s = "Hello, my\n  name is Michael." 
s.gsub(/\s+/, " ") 
+0

la salida no sería correcta en el caso de '" Hola, \ nMi nombre es Michael "'. Idealmente, querrías un espacio donde hay un '\ n' – Ali

+0

Tienes razón, lo he corregido. – Nikola

4

esta expresión regular sustituirá a instancia de 1 o más espacios en blanco con 1 espacio en blanco, ps \s reemplazará todos los caracteres de espacio en blanco que incluyen \s\t\r\n\f:

a_string.gsub!(/\s+/, ' ') 

mismo modo por sólo retorno de carro

str.gsub!(/\n/, " ") 

Primera reemplazar toda \n con espacios en blanco, a continuación, utilizar la expresión regular quitar varios espacios en blanco.

+0

Gracias! Esto funcionó para mis propósitos para eliminar espacios múltiples, pero mantener un espacio único entre las palabras. –

4
my_string = "Hello, my\n  name is Michael." 
my_string = my_string.gsub(/\s+/, " ") 
+0

, también le gustaría eliminar el '\ n' idealmente (creo) debería reemplazarse con un espacio en caso de algo como' "Hola, \ nMi nombre es Michael" ' – Ali

+0

@Ali, es verdad – fl00r

32

Para ilustrar Rubys construidas en apretón:

string.gsub("\n", ' ').squeeze(' ') 
+2

Solo tenga en cuenta: squeeze comprimirá TODAS las cadenas que vienen en ejecuciones de múltiples caracteres. Así que "Exprime la copia de mi aplicación" .squeeze => "Squeze la copia de mi aplicación" – charliepark

+7

Pero 'squeeze ('')' simplemente exprime espacios. '" Exprimir la copia de mi aplicación ".squeeze ('') =>" Exprimir la copia de mi aplicación "'. – steenslag

+0

Ah. ¡Buen punto! – charliepark

3

intenta esto:

s = "Hello, my\n  name is Michael." 
s.gsub(/\n\s+/, " ") 
+0

Elegante, gracias! – Vlad

+0

Esta es realmente la mejor respuesta de "rubí simple", y funciona correctamente para quitar espacios iniciales de una cadena de varias líneas. –

0
Use squish 
currency = " XCD" 
str = currency.squish 
str = "XCD" #=> "XCD" 
Cuestiones relacionadas