Saya hanya ingin tahu apakah ada metode untuk menghapus string dari string lain? Sesuatu seperti ini:
class String
def remove(s)
self[s.length, self.length - s.length]
end
end
Anda dapat menggunakan metode slice:
a = "foobar"
a.slice! "foo"
=> "foo"
a
=> "bar"
ada yang bukan '!' versi juga. Info lebih lanjut dapat dilihat di dokumentasi tentang versi lain juga: http://www.ruby-doc.org/core/classes/String.html#method-i-slice-21
[]
s untuk versi non-bang."foobar".tap{|s| s.slice!("foo")}.upcase
delete
tidak akan berfungsi, karena menghapus semua karakter yang Anda masukkan :'hello world'.delete('hello') #=> ' wrd'
Bagaimana
str.gsub("subString", "")
dengan Ruby Docsumber
sub
akan lebih tepat daripadagsub
, karena OP hanya ingin menghapus substring dari awal string, tidak semua melalui string (lihat kode contohnya). Dan menggunakan regex, seperti ini, akan lebih baik:str.sub(/^subString/, '')
- karena memastikan bahwa substring pasti akan dihapus hanya dari awal.subString
tidak memasukkan karakter khusus regex./^subString/
adalah literal, jadi kita bisa sangat yakin itu tidak termasuk karakter metachar. Jika Anda mengganti beberapa string lain dalam regex, Anda dapat melakukan ini:/#{Regexp.escape(str)}/
.Regexp.escape()
.Jika ini adalah akhir dari string, Anda juga dapat menggunakan
chomp
:sumber
chomp
dalam kombinasi denganreverse
:"hello".reverse.chomp("he".reverse).reverse #=> "llo"
Jika Anda hanya memiliki satu kemunculan string target yang dapat Anda gunakan:
atau
Jika Anda memiliki beberapa kejadian penggunaan target:
Misalnya:
Jika Anda perlu melakukan penggantian di tempat, gunakan
"!"
versigsub!
dansub!
.sumber
asdf['bar'] = ''
Jika Anda menggunakan Rails, ada juga
remove
.Misalnya
"Testmessage".remove("message")
hasil"Test"
.Peringatan: metode ini menghilangkan semua kejadian
sumber
slice
metode ini tidak mengembalikan bagian dari tali yang diiris, itu mengembalikan "pisau"slice!
def gimme_the_slice(my_string, my_slice) my_string.slice!(my_slice) my_string
Ruby 2.5+
Jika substring Anda ada di awal di akhir string, maka Ruby 2.5 telah memperkenalkan metode untuk ini:
sumber
Jika Anda menggunakan rel atau dengan dukungan kurang aktif Anda mendapat String # remove dan String # remove! metode
sumber: http://api.rubyonrails.org/classes/String.html#method-i-remove
sumber
Jika saya menafsirkan dengan benar, pertanyaan ini sepertinya menanyakan sesuatu seperti operasi minus (-) di antara string, yaitu kebalikan dari operasi built-in plus (+) (gabungan).
Tidak seperti jawaban sebelumnya, saya mencoba mendefinisikan operasi yang harus mematuhi properti:
JIKA c = a + b THEN c - a = b DAN c - b = a
Kami hanya membutuhkan tiga metode Ruby bawaan untuk mencapai ini:
'abracadabra'.partition('abra').values_at(0,2).join == 'cadabra'
.Saya tidak akan menjelaskan cara kerjanya karena dapat dengan mudah dipahami menjalankan satu metode pada satu waktu.
Berikut ini adalah bukti kode konsep:
Satu kata nasihat terakhir jika Anda menggunakan versi Ruby terbaru (> = 2.0): gunakan Penyempitan alih-alih String monyet-patching seperti pada contoh sebelumnya.
Semudah:
dan tambahkan
using MinusString
sebelum blok di mana Anda membutuhkannya.sumber
inilah yang akan saya lakukan
Diformat dalam beberapa baris:
sumber
sumber
Ö
misalnya.