2011-08-18 14 views

Odpowiedz

140

Wyjazd Szyny squish metoda:

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

+6

Najprostszy i najbardziej eleganckie rozwiązanie. Dzięki. Ale jest jedna rzecz, ta metoda jest zdefiniowana w Railsach, więc będzie działać tylko w aplikacjach Rails, na szczęście to jest moja sprawa. – Kreeki

+5

fajny :) nigdy o nim nie słyszałem – fl00r

+2

Jak powiedział Kreki, to jest metoda Rails, a nie metoda Ruby. –

16

Najprostszym sposobem będzie prawdopodobnie

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

To trudne, ale działa jak urok. – Kreeki

3

Zastosowanie String#gsub:

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

wyjście nie byłoby poprawne w przypadku '' Hello, \ nMój nazwa to Michael "'. Idealnie chciałbyś mieć miejsce, w którym jest '\ n' – Ali

+0

Masz rację, poprawiłem to. – Nikola

4

to wyrażenie odnajdzie wymienić przypadek 1 lub więcej białych plam z 1 białej przestrzeni ps \s zastąpi wszystkie znaki spacji białej, które zawierają \s\t\r\n\f:

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

Podobnie tylko karetki

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

najpierw wymienić wszystkie \n białą przestrzeni, a następnie za pomocą usunąć wiele białą przestrzeń wyrażenia regularnego.

+0

Dzięki! To działało dla moich celów, aby usunąć spacje wielokrotne, ale zachować pojedynczą spację między wyrazami. –

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

chciałby też usunąć '\ n' idealnie (jak sądzę) powinien on zostać zastąpiony spacją w przypadku czegoś takiego jak" Witaj, \ nMoje imię jest Michael "' – Ali

+0

@Ali, to prawda – fl00r

32

Aby zilustrować RUBYS zbudowany w wycisnąć:

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

Po prostu uważaj: squeeze będzie kompresować wszystkie ciągi, które pochodzą z wielu znaków. Więc "Wyciśnij kopię mojej aplikacji" .squeeze => "Odłóż kopię mojej aplikacji" – charliepark

+7

Ale 'squeeze ('')' właśnie ściska spacje. '" Ściśnij kopię mojego wniosku ".squeeze ('') =>" Ściśnij kopię mojej aplikacji "'. – steenslag

+0

Ah. Słuszna uwaga! – charliepark

3

Spróbuj to:

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

Eleganckie, dziękuję! – Vlad

+0

Jest to właściwie najlepsza odpowiedź "zwykły rubin" i działa poprawnie w celu usunięcia spacji z ciągu wieloliniowego. –

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