Najprostsze 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 Railsowych, na szczęście tak jest w moim przypadku.
Kreeki
4
Jak powiedział Kreeki nieco niejasno, jest to metoda Railsów, a nie metoda Ruby.
17
W kontekście innym niż Rails, użyj some_string.strip.gsub(/\s+/, " ")dokładnie tego, co robi squish.
Po prostu bądź świadomy: squeeze skompresuje WSZYSTKIE ciągi, które występują w ciągach wielu znaków. Więc „Squeeze my application's copy” .squeeze => „Squeze my application's copy”
charliepark
8
Ale squeeze(' ')po prostu ściska spacje. "Squeeze my application's copy".squeeze(' ') => "Squeeze my application's copy".
steenslag
22
Prawdopodobnie najprostszy sposób
s ="Hello, my\n name is Michael."
s.split.join(' ')#=> "Hello, my name is Michael."
some_string.strip.gsub(/\s+/, " ")
dokładnie tego, co robi squish.squish
Aby zilustrować wbudowany w squeeze Rubys :
źródło
squeeze(' ')
po prostu ściska spacje."Squeeze my application's copy".squeeze(' ') => "Squeeze my application's copy"
.Prawdopodobnie najprostszy sposób
źródło
Spróbuj tego:
źródło
źródło
\n
idealnie (czuję), że należy go zastąpić spacją w przypadku czegoś takiego jak"Hello,\nMy name is Michael"
to wyrażenie regularne zastąpi wystąpienie 1 lub więcej białych spacji 1 białą spacją, ps
\s
zastąpi wszystkie białe znaki, które obejmują\s\t\r\n\f
:Podobnie tylko dla powrotu karetki
Najpierw zamień wszystko na
\n
białe spacje, a następnie użyj wyrażenia regularnego usuń wiele białych znaków.źródło
Użyj ciągu # gsub :
źródło
"Hello,\nMy name is Michael"
. Idealnie byłoby, gdybyś chciał mieć przestrzeń, w której jest\n
źródło
Możesz dodać tylko
squish
metodę (i nic więcej) do Rubiego, włączając tylko ten aspekt Rubiego:https://github.com/rubyworks/facets/blob/master/lib/core/facets/string/squish.rb
Następnie użyj
Nie wymaga Railsów.
źródło