উত্তর:
আপনি স্লাইস পদ্ধতিটি ব্যবহার করতে পারেন:
a = "foobar"
a.slice! "foo"
=> "foo"
a
=> "bar"
একটি অ 'আছে!' সংস্করণ হিসাবে। অন্যান্য সংস্করণ সম্পর্কেও ডকুমেন্টেশনে আরও তথ্য দেখা যাবে: http://www.ruby-doc.org/core/classes/String.html#method-i-slice-21
"foobar".tap{|s| s.slice!("foo")}.upcase
delete
কাজ করবে না, যেহেতু এটি আপনার পাস করা সমস্ত চরিত্র মুছে ফেলে:'hello world'.delete('hello') #=> ' wrd'
কিভাবে রুবি ডকstr.gsub("subString", "")
চেক আউট
sub
এর চেয়ে আরও উপযুক্ত হতে পারে gsub
, যেহেতু ওপি কেবল স্ট্রিংয়ের শুরু থেকে স্ট্রিংগুলি সরাতে চায় , সমস্ত স্ট্রিংয়ের মাধ্যমে নয় (তার নমুনা কোডটি দেখুন)। এবং এর মতো একটি রেজেক্স ব্যবহার করা আরও ভাল হবে: str.sub(/^subString/, '')
- কারণ এটি নিশ্চিত করে যে কেবল সাবস্ট্রিংটি কেবল প্রথম থেকেই মুছে ফেলা হবে।
subString
যে কোনও রেগেক্স বিশেষ অক্ষরকে অন্তর্ভুক্ত না করে তবে এটি বিপজ্জনক ।
/^subString/
একটি আক্ষরিক, তাই আমরা খুব নিশ্চিত হতে পারি যে এটিতে কোনও মেটাচার্যাক্টর অন্তর্ভুক্ত নেই। আপনি যদি একটি Regex মধ্যে কিছু অন্যান্য স্ট্রিং বদলে হয়, আপনি এটা করতে পারেন: /#{Regexp.escape(str)}/
।
Regexp.escape()
যদিও পয়েন্টারের জন্য ধন্যবাদ ।
যদি এটি স্ট্রিংয়ের সমাপ্তি হয় তবে আপনি এটি ব্যবহার করতে পারেন chomp
:
"hello".chomp("llo") #=> "he"
chomp
মিশ্রণে ব্যবহার করতে পারেন reverse
:"hello".reverse.chomp("he".reverse).reverse #=> "llo"
আপনার যদি লক্ষ্য স্ট্রিংয়ের কেবল একটির উপস্থিতি থাকে তবে আপনি এটি ব্যবহার করতে পারেন:
str[target] = ''
অথবা
str.sub(target, '')
আপনার যদি লক্ষ্য ব্যবহারের একাধিক ঘটনা থাকে:
str.gsub(target, '')
এই ক্ষেত্রে:
asdf = 'foo bar'
asdf['bar'] = ''
asdf #=> "foo "
asdf = 'foo bar'
asdf.sub('bar', '') #=> "foo "
asdf = asdf + asdf #=> "foo barfoo bar"
asdf.gsub('bar', '') #=> "foo foo "
আপনাকে যা করতে হবে তাহলে জায়গা বদল ব্যবহার "!"
সংস্করণ gsub!
এবং sub!
।
asdf['bar'] = ''
আপনি যদি রেল ব্যবহার করেন তবে তাও আছে remove
।
যেমন "Testmessage".remove("message")
ফলন "Test"
।
সতর্কতা: এই পদ্ধতিটি সমস্ত উপস্থিতি সরিয়ে দেয়
slice
পদ্ধতিটি কাটা স্ট্রিংয়ের অংশটি ফিরিয়ে দেয় না, এটি "ছুরি" ফিরিয়ে দেয়
slice!
def gimme_the_slice(my_string, my_slice) my_string.slice!(my_slice) my_string
যদি আপনার স্ট্রিংয়ের শুরুতে কোনও স্ট্রিংয়ের শেষে থাকে, তবে রুবি 2.5 এটির জন্য পদ্ধতিগুলি চালু করেছে:
আপনি যদি রেল ব্যবহার করছেন বা কম অ্যাক্টিভাসপোর্টে স্ট্রিং পেয়েছেন # সরিয়ে এবং স্ট্রিং # সরান! পদ্ধতি
def remove!(*patterns)
patterns.each do |pattern|
gsub! pattern, ""
end
self
end
উত্স: http://api.rubyonrails.org/classes/String.html#method-i- সরানো
আমি যদি সঠিক ব্যাখ্যা দিচ্ছি, তবে এই প্রশ্নটি স্ট্রিংগুলির মধ্যে বিয়োগ (-) অপারেশনের মতো কিছু অনুরোধ করবে বলে মনে হচ্ছে বিল্ট-ইন প্লাস (+) অপারেশন (কনটেনটেশন) এর বিপরীত।
পূর্ববর্তী উত্তরের মতো নয়, আমি এমন একটি ক্রিয়াকলাপ সংজ্ঞায়িত করার চেষ্টা করছি যা অবশ্যই সম্পত্তিটি মানবে:
যদি সি = a + বি তত সি - এ = বি এবং গ - বি = এ
এটি অর্জনের জন্য আমাদের কেবল তিনটি বিল্ট-ইন রুবি পদ্ধতি প্রয়োজন:
'abracadabra'.partition('abra').values_at(0,2).join == 'cadabra'
।
এটি কীভাবে কাজ করে তা আমি ব্যাখ্যা করব না কারণ এটি একবারে একটি পদ্ধতি চালানো সহজেই বোঝা যায়।
কনসেপ্ট কোডের একটি প্রমাণ এখানে দেওয়া হয়েছে:
# minus_string.rb
class String
def -(str)
partition(str).values_at(0,2).join
end
end
# Add the following code and issue 'ruby minus_string.rb' in the console to test
require 'minitest/autorun'
class MinusString_Test < MiniTest::Test
A,B,C='abra','cadabra','abracadabra'
def test_C_eq_A_plus_B
assert C == A + B
end
def test_C_minus_A_eq_B
assert C - A == B
end
def test_C_minus_B_eq_A
assert C - B == A
end
end
আপনি যদি একটি সাম্প্রতিক রুবি সংস্করণ (> = 2.0) ব্যবহার করেন তবে পরামর্শের একটি শেষ শব্দ: আগের উদাহরণের মতো বানর-প্যাচিং স্ট্রিংয়ের পরিবর্তে পরিশোধন ব্যবহার করুন ।
এটি যতটা সহজ:
module MinusString
refine String do
def -(str)
partition(str).values_at(0,2).join
end
end
end
এবং using MinusString
যেখানে আপনার যেগুলি ব্লক প্রয়োজন সেখানে যুক্ত করুন।
এখানে আমি কি করব
2.2.1 :015 > class String; def remove!(start_index, end_index) (end_index - start_index + 1).times{ self.slice! start_index }; self end; end;
2.2.1 :016 > "idliketodeleteHEREallthewaytoHEREplease".remove! 14, 32
=> "idliketodeleteplease"
2.2.1 :017 > ":)".remove! 1,1
=> ":"
2.2.1 :018 > "ohnoe!".remove! 2,4
=> "oh!"
একাধিক লাইনে ফর্ম্যাট করা:
class String
def remove!(start_index, end_index)
(end_index - start_index + 1).times{ self.slice! start_index }
self
end
end
def replaceslug
slug = "" + name
@replacements = [
[ "," , ""],
[ "\\?" , ""],
[ " " , "-"],
[ "'" , "-"],
[ "Ç" , "c"],
[ "Ş" , "s"],
[ "İ" , "i"],
[ "I" , "i"],
[ "Ü" , "u"],
[ "Ö" , "o"],
[ "Ğ" , "g"],
[ "ç" , "c"],
[ "ş" , "s"],
[ "ı" , "i"],
[ "ü" , "u"],
[ "ö" , "o"],
[ "ğ" , "g"],
]
@replacements.each do |pair|
slug.gsub!(pair[0], pair[1])
end
self.slug = slug.downcase
end
Ö
উদাহরণস্বরূপ অপসারণ করতে বলেনি ।
[]
নন-ব্যাং সংস্করণে এস ব্যবহার করতে পারেন ।