ruby - স্ট্রিং থেকে substring সরান
(7)
আপনি Rails ব্যবহার করা হয়, তাহলে remove
।
যেমন "Testmessage".remove("message")
"Test"
ফলন করে।
সতর্কতা: এই পদ্ধতি সব ঘটনা মুছে ফেলা
আমি অন্য স্ট্রিং থেকে স্ট্রিং অপসারণ করার কোনো পদ্ধতি আছে শুধু ভাবছি? এটার মতো কিছু:
class String
def remove(s)
self[s.length, self.length - s.length]
end
end
আপনি টালি পদ্ধতি ব্যবহার করতে পারেন:
a = "foobar"
a.slice! "foo"
=> "foo"
a
=> "bar"
একটি অ '!! পাশাপাশি সংস্করণ। অন্যান্য সংস্করণ সম্পর্কে ডকুমেন্টেশনটিতে আরও তথ্য দেখতে পাওয়া যেতে পারে: http://www.ruby-doc.org/core/classes/String.html#M001213
আপনি শুধুমাত্র লক্ষ্য স্ট্রিং এক সংঘটন আছে যদি আপনি ব্যবহার করতে পারেন:
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!
সংস্করণ gsub!
এবং sub!
।
এখানে আমি কি করব
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
যদি আমি সঠিকভাবে ব্যাখ্যা করছি, এই প্রশ্নটি স্ট্রিংগুলির মধ্যে একটি বিয়োগ (-) অপারেশন, যেমন বিল্ট-ইন প্লাস (+) অপারেশন (কনক্যাটেনেশন) এর বিপরীতে কিছু বলে।
পূর্ববর্তী উত্তরগুলির বিপরীতে, আমি এমন একটি অপারেশন সংজ্ঞায়িত করার চেষ্টা করছি যা অবশ্যই সম্পত্তিটি পালন করতে হবে:
যদি সি = একটি + বি তারপর সি - একটি = বি এবং সি - বি = একটি
এই অর্জনের জন্য আমাদের শুধুমাত্র তিনটি রুবি পদ্ধতি দরকার:
'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) ব্যবহার করছেন তবে পরামর্শের একটি শেষ শব্দ: আগের উদাহরণের মতো বানর-প্যাচিং Refinements পরিবর্তে Refinements ব্যবহার করুন।
এটা যেমন সহজ:
module MinusString
refine String do
def -(str)
partition(str).values_at(0,2).join
end
end
end
এবং আপনি এটি প্রয়োজন যেখানে ব্লক আগে using MinusString
যোগ করুন।
যদি এটি স্ট্রিংটির শেষ হয় তবে আপনি chomp
ব্যবহার করতে পারেন:
"hello".chomp("llo") #=> "he"
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