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.

Jawaban:


188

lihat squishmetode Rails :

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


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(' ')

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."

8

Coba ini:

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

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+/, " " )

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.


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+/, " ")

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"

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.