他の文字列から文字列を削除する方法があるかどうか私は思っていませんか。このようなもの:
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#M00121
str.gsub("subString", "")
はどうですか Ruby Doc を調べてください
それが文字列の終わりであれば、 chomp
を使うこともできます。
"hello".chomp("llo") #=> "he"
ターゲット文字列が1回しかない場合は、次のものを使用できます。
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!
を使用してください。
Railsを使っているのであれば remove
もあります。
例えば。 "Testmessage".remove("message")
は"Test"
を返します。
警告:このメソッドはall出現を削除します
あなたの部分文字列が文字列の終わりの始めにある場合、Ruby 2.5はこのためのメソッドを導入しました:
Railsを使用しているか、それほどアクティブではないサポートでは、String#removeとString#removeを使用できます。方法
def remove!(*patterns)
patterns.each do |pattern|
gsub! pattern, ""
end
self
end
ソース: http://api.rubyonrails.org/classes/String.html#method-i-remove
私が正しく解釈しているなら、この質問は文字列の間のマイナス( - )操作、すなわち組み込みのプラス(+)操作(連結)の反対のようなものを要求するようです。
前の答えとは異なり、私はプロパティに従わなければならないような操作を定義しようとしています:
IF c = a + b c - a = b AND c - b = a
これを実現するために必要な組み込みRubyメソッドは3つだけです。
'abracadabra'.partition('abra').values_at(0,2).join == 'cadabra'
。
一度に1つのメソッドを実行することで簡単に理解できるため、その仕組みについては説明しません。
これが概念コードの証明です。
# 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
最近のRubyバージョン(> = 2.0)を使用している場合の最後のアドバイスです。サルの代わりに 改良版 を使用してください。前の例のように-patching文字列。
それは同じくらい簡単です:
module MinusString
refine String do
def -(str)
partition(str).values_at(0,2).join
end
end
end
そして、必要なブロックの前にusing MinusString
を追加します。