String'in içindeki birden çok boşluğu ve yeni satırı kaldırın


104

Şöyle bir dizemiz olduğunu varsayalım:

Hello, my\n       name is Michael.

Bunu elde etmek için bu yeni satırı nasıl kaldırabilirim ve ondan sonra bu boşlukları dizenin içinde nasıl ayırabilirim?

Hello, my name is Michael.

Yanıtlar:


188

Rails squishyöntemine göz atın :

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


6
En basit ve en zarif çözüm. Teşekkürler. Ancak bir şey var, bu yöntem Rails'de tanımlanmıştır, bu nedenle yalnızca Rails uygulamalarında çalışacaktır, neyse ki benim durumum bu.
Kreeki

4
Kreeki'nin biraz belirsiz dediği gibi, bu bir Ruby yöntemi değil, bir Rails yöntemidir.

17
Rails olmayan bir bağlam için, some_string.strip.gsub(/\s+/, " ")squish'in yaptığı tam olarak hangisini kullanın .
rapcal

1
Teşekkür ederim! Bunu bilmiyordumsquish
Francois

38

Yakutların sıkıştırmada yerleşik olduğunu göstermek için :

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

3
Unutmayın: squeeze, birden çok karakterden oluşan dizilerle gelen TÜM dizeleri sıkıştıracaktır. "Başvurumun kopyasını sıkıştır" .squeeze => "Başvurumun kopyasını sıkıştır"
charliepark

8
Ama squeeze(' ')sadece boşlukları sıkıştırır. "Squeeze my application's copy".squeeze(' ') => "Squeeze my application's copy".
steenslag

22

En basit yol muhtemelen

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

8

Bunu dene:

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

Bu aslında en iyi "düz yakut" cevabıdır ve çok satırlı bir dizeden baştaki boşlukları ayıklamak için doğru şekilde çalışır.
Koen.

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

\nİdeal olanı da kaldırmak istiyor (hissediyorum)"Hello,\nMy name is Michael"
Ali

4

bu normal ifade 1 veya daha fazla beyaz boşluk örneğini 1 beyaz boşlukla \sdeğiştirir , ps aşağıdakileri içeren tüm beyaz boşluk karakterlerini değiştirir \s\t\r\n\f:

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

Benzer şekilde sadece satır başı için

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

Önce tümünü \nbeyaz boşlukla değiştirin , ardından birden çok beyaz boşluk kaldır normal ifadesini kullanın.


Teşekkürler! Bu, çoklu boşlukları kaldırmak, ancak kelimeler arasında tek boşluk bırakmak için benim amaçlarım için çalıştı.
acoustic_north

3

Dize # gsub kullanın :

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

olması durumunda çıktı doğru olmaz "Hello,\nMy name is Michael". İdeal olarak \n
Ali

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.