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.

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


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.


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.


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

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"

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

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.