Hapus beberapa spasi dan baris baru di dalam String

104

Misalkan kita memiliki string seperti ini:

Hello, my\n       name is Michael.

Bagaimana saya bisa menghapus baris baru itu dan menghapus spasi tersebut setelah itu menjadi salah satu bagian dalam string untuk mendapatkan ini?

Hello, my name is Michael.
Kreeki
sumber

Jawaban:

188

lihat squishmetode Rails :

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

socjopata
sumber
6
Solusi paling sederhana dan paling elegan. Terima kasih. Tapi ada satu hal, metode ini didefinisikan di Rails, jadi ini hanya akan berfungsi di aplikasi Rails, untungnya itu kasus saya.
Kreeki
4
Seperti yang dikatakan Kreeki sedikit tidak jelas, ini adalah metode Rails, bukan metode Ruby.
17
Untuk konteks non-Rails, gunakan some_string.strip.gsub(/\s+/, " ")yang persis seperti yang dilakukan squish.
rapcal
1
Terima kasih! Tidak tahu tentangsquish
Francois
38

Untuk mengilustrasikan Ruby built in squeeze :

string.gsub("\n", ' ').squeeze(' ')
steenslag.dll
sumber
3
Perlu diketahui: squeeze akan memampatkan SEMUA string yang terdiri dari beberapa karakter. Jadi "Peras salinan lamaran saya" .squeeze => "Squeze my application's copy"
charliepark
8
Tapi squeeze(' ')hanya meremas ruang. "Squeeze my application's copy".squeeze(' ') => "Squeeze my application's copy".
steenslag
22

Cara termudah mungkin adalah

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

Coba ini:

s = "Hello, my\n       name is Michael."
s.gsub(/\n\s+/, " ")
anusha
sumber
Ini sebenarnya adalah jawaban "ruby biasa" terbaik, dan berfungsi dengan baik untuk menghilangkan spasi di depan dari string multiline.
Koen.
5
my_string = "Hello, my\n       name is Michael."
my_string = my_string.gsub( /\s+/, " " )
fl00r
sumber
dia juga ingin menghapus \nidealnya (saya rasa) itu harus diganti dengan spasi jika terjadi sesuatu seperti"Hello,\nMy name is Michael"
Ali
4

regex ini akan mengganti instance dari 1 atau lebih spasi putih dengan 1 spasi, ps \sakan mengganti semua karakter spasi yang meliputi \s\t\r\n\f:

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

Demikian pula untuk gerbong hanya kembali

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

Pertama, ganti semua \ndengan spasi, lalu gunakan regex spasi putih hapus beberapa.

Ali
sumber
Terima kasih! Ini berfungsi untuk tujuan saya untuk menghapus beberapa spasi tetapi mempertahankan spasi tunggal di antara kata-kata.
acoustic_north
3

Gunakan String # gsub :

s = "Hello, my\n       name is Michael."
s.gsub(/\s+/, " ")
Nikola
sumber
keluaran tidak akan benar dalam kasus "Hello,\nMy name is Michael". Idealnya Anda menginginkan ruang di mana ada\n
Ali
1
Use squish
currency = " XCD"
str = currency.squish
 str = "XCD" #=> "XCD"
vikas sobat
sumber