2011-08-18 17 views

risposta

140

check out Rails squish metodo:

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

+6

Il più semplice e la soluzione più elegante. Grazie. Ma c'è una cosa, questo metodo è definito in Rails, quindi funzionerà solo nelle applicazioni Rails, fortunatamente è il mio caso. – Kreeki

+5

cool one :) non ne ho mai sentito parlare – fl00r

+2

Come Kreeki ha detto un tantino non chiaro, questo è un metodo Rails, non un metodo Ruby. –

16

Il modo più semplice sarebbe probabilmente

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

Oh, è difficile, ma funziona come un fascino. L'output – Kreeki

3

Uso String#gsub:

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

non sarebbe corretto nel caso di "Hello, \ nIl mio nome è Michael" '. Idealmente vorresti uno spazio dove c'è un '\ n' – Ali

+0

Hai ragione, l'ho corretto. – Nikola

4

questa regex sostituirà istanza di 1 o più spazi bianchi con 1 spazio bianco, ps \s sostituirà tutti i caratteri dello spazio bianco che includono \s\t\r\n\f:

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

Analogamente solo ritorno carrello

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

Prima sostituire tutto \n con uno spazio vuoto, quindi utilizzare il rimuovere più spazio regex bianco.

+0

Grazie! Questo ha funzionato per i miei scopi per rimuovere gli spazi multipli ma mantenere lo spazio tra le parole. –

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

vorrebbe anche rimuovere il '\ n' idealmente (credo) dovrebbe essere sostituito con uno spazio in caso di qualcosa come" "Ciao, \ nIl mio nome è Michael" ' – Ali

+0

@Ali, questo è vero – fl00r

32

Per illustrare Rubys costruito nel squeeze:

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

Tieni presente che: squeeze comprimerà TUTTE le stringhe che arrivano in serie di più caratteri. Quindi "Spremere la mia copia dell'applicazione" .squeeze => "Squeze la mia copia di aplicazione" – charliepark

+7

Ma 'squeeze ('')' stringe solo gli spazi. '" Spremere la mia copia dell'applicazione ".squeeze ('') =>" Spremere la copia della mia applicazione "'. – steenslag

+0

Ah. Buon punto! – charliepark

3

Try This:

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

Elegante, grazie! – Vlad

+0

Questa è in realtà la migliore risposta "plain ruby" e funziona correttamente per rimuovere gli spazi iniziali da una stringa multilinea. –

0
Use squish 
currency = " XCD" 
str = currency.squish 
str = "XCD" #=> "XCD" 
Problemi correlati