2011-08-18 71 views
73

裏面假設我們有串這樣的:刪除多個空格和換行字符串

Hello, my\n  name is Michael. 

我如何刪除新的生產線和後剝去那些空間成一個字符串內得到這個?

Hello, my name is Michael. 

回答

140

退房的Rails squish方法:

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

+6

最簡單的最優雅的解決方案。謝謝。但有一件事,這個方法在Rails中定義,所以它只能在Rails應用程序中工作,幸運的是,這是我的情況。 – Kreeki

+5

酷一個:)從來沒有聽說過它 – fl00r

+2

由於Kreeki有點不清楚,這是一個Rails方法,而不是Ruby方法。 – 2013-04-20 07:31:11

16

最簡單的方法很可能是

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

哦,這很棘手,但它的工作就像一個魅力。 – Kreeki

3

使用String#gsub

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

在''你好,\ n我的名字是Michael''的情況下輸出不正確。理想情況下,你會想要一個空間,有一個'\ n' – Ali

+0

你是對的,我已經糾正它。 – Nikola

4

這個表達式將取代1個或多個空格1個空格例如,PS \s將取代所有包含空格的字符\s\t\r\n\f

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

同樣只回車

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

先用空格替換所有\n,然後使用刪除多個空格正則表達式。

+0

謝謝!這爲我的目的,刪除多個空格,但保持單詞之間的單個空間。 –

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

他也想在理想情況下刪除'\ n'(我覺得)它應該用空格代替,如果是''你好,\ n我的名字是Michael'' – Ali

+0

@Ali,那是真的 – fl00r

32

爲了說明建於擠壓 RUBYS:

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

只需注意:擠壓會壓縮所有以多個字符運行的字符串。所以 「擠壓我的應用程序的副本」.squeeze =>「吱吱叫我的應用程序的副本」 – charliepark

+7

但擠壓('')'只是擠壓空間。 ''擠壓我的應用程序的副本「.squeeze('')=>」擠壓我的應用程序的副本「。 – steenslag

+0

啊。好點子! – charliepark

3

試試這個:

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

優雅,謝謝! – Vlad

+0

這實際上是最好的「平原紅寶石」的答案,並適用於從多行字符串剝離領先空間。 –

0
Use squish 
currency = " XCD" 
str = currency.squish 
str = "XCD" #=> "XCD" 
相關問題