Bagaimana cara menghapus string "\ n" dari dalam string Ruby?

115

Saya memiliki string ini:

"some text\nandsomemore"

Saya perlu menghapus "\ n" darinya. Saya sudah mencoba

"some text\nandsomemore".gsub('\n','')

tapi tidak berhasil. Bagaimana saya melakukannya? Terima kasih sudah membaca.

ben
sumber

Jawaban:

172

Anda harus menggunakan "\n"bukan '\n'di gsub Anda. Tanda kutip yang berbeda berperilaku berbeda.

Tanda kutip ganda "memungkinkan perluasan karakter dan interpolasi ekspresi yaitu. mereka membiarkan Anda menggunakan karakter kontrol lolos seperti \nuntuk mewakili nilai sebenarnya, dalam hal ini, baris baru , dan memungkinkan penggunaan #{expression}sehingga Anda dapat menenun variabel dan, yah, hampir semua ekspresi ruby ​​yang Anda suka ke dalam teks.

Sementara di sisi lain, tanda kutip tunggal 'memperlakukan string secara harfiah, jadi tidak ada ekspansi, penggantian, interpolasi atau apa pun yang Anda miliki.

Dalam kasus khusus ini, lebih baik menggunakan metode .deleteatau .trString untuk menghapus baris baru .

Lihat di sini untuk info lebih lanjut

ocodo
sumber
17
sintaks yang tepat benar-benar akan menjadi .gsub (/ \ n /, "")
boulder_ruby
2
@Dvid benar. Namun, saya merasa penting untuk menunjukkan bahwa kutipan tersebut membuat perbedaan, karena hal itu akan menguntungkan Ben pada saat ini. Pikiran Anda, David, ini mungkin lebih ke masalah gaya daripada "benar". Secara pribadi saya pikir tradalah pilihan yang lebih baik untuk tugas ini, tetapi seperti yang saya katakan, saya pikir lebih baik menunjukkan perbedaan dalam tanda kutip tunggal dan ganda ketika saya menjawab.
ocodo
60

Saat Anda ingin menghapus string, daripada menggantinya, Anda dapat menggunakan String#delete(atau setara mutatornya String#delete!), misalnya:

x = "foo\nfoo"
x.delete!("\n")

x sekarang sama dengan "foofoo"

Dalam kasus khusus String#deleteini lebih mudah dibaca daripada gsubkarena Anda tidak benar-benar mengganti string dengan apapun.

Paul Leader
sumber
3
Setidaknya di Ruby 1.9.3, deletetidak merusak seperti yang ditunjukkan di sini. Ini mengembalikan string baru.
Brent Dillingham
Terlihat bagus. Saya telah memperbarui potongan kode itu untuk menggunakan versi mutator String # delete! daripada String # delete
Paul Leader
56

Jika Anda ingin atau tidak keberatan menghapus semua spasi di depan dan di belakang dari string Anda, Anda dapat menggunakan stripmetode ini.

"    hello    ".strip   #=> "hello"   
"\tgoodbye\r\n".strip   #=> "goodbye"

seperti yang disebutkan di sini .

edit Judul asli untuk pertanyaan ini berbeda. Jawaban saya untuk pertanyaan awal.

ThomasW
sumber
2
Ini tidak menjawab pertanyaan itu. striphanya menghapus spasi kosong di depan dan di belakang: ruby-doc.org/core-1.9.3/String.html#method-i-strip-21
thelostspore
1
@mvdanj Ya, mengingat detail dari pertanyaan khusus ini, ia tidak menjawabnya, tetapi ia menjawab pertanyaan hanya berdasarkan judul. Saya curiga itulah mengapa orang menganggapnya berguna.
ThomasW
Judul telah diubah dari saat saya pertama kali menjawab.
ThomasW
29

Anda tidak membutuhkan ekspresi reguler untuk ini. Gunakan tr:

"some text\nandsomemore".tr("\n","")
Mark Thomas
sumber
Apa perbedaan antara tr an replace?
Arnold Roa
replacehanya mengubah string ke yang baru, seperti tugas variabel; sedangkan trkarakter-demi-karakter menemukan dan mengganti global.
Mark Thomas
20

gunakan chompatau stripfungsi dari Ruby:

"abcd\n".chomp => "abcd"
"abcd\n".strip => "abcd"
Mateo Vidal
sumber
2
Ini tidak menjawab pertanyaan itu. striphanya menghapus spasi kosong di depan dan di belakang - ruby-doc.org/core-1.9.3/String.html#method-i-strip-21
thelostspore
2
chomp adalah cara terbaik ... tidak percaya ini memiliki begitu sedikit
suara positif
dalam metode chomp, \ n dan \ r dihapus dari ujung str jika ada, bukan di tengah. Jadi ini tidak menyelesaikan pertanyaan OP
silva96