从string中删除子string

我只是想知道是否有任何方法从另一个string中删除string? 像这样的东西:

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.gsub("subString", "")查看Ruby文档

如果它是string的结尾,也可以使用chomp

 "hello".chomp("llo") #=> "he" 

如果您只有一个目标string,您可以使用:

 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 " 

如果您需要进行就地replace,请使用"!" gsub!版本gsub!sub!

如果您使用的是Rails,那么也可以remove

例如"Testmessage".remove("message")产生"Test"

警告:此方法删除所有事件

如果你正在使用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

如果我正确解释,这个问题似乎要求像string之间的减号( – )操作,即与内置的加号(+)操作(连接)相反。

不像以前的答案,我试图定义这样一个操作,必须服从属性:

IF c = a + b THEN c – a = b AND c – b = a

我们只需要三个内置的Ruby方法来实现这一点:

'abracadabra'.partition('abra').values_at(0,2).join == 'cadabra'

我不会解释它是如何工作的,因为一次只能运行一种方法就可以很容易理解。

这是一个概念validation码:

 # 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),最后一句build议是:使用细化而不是像前一个示例中的monkey-patching String。

这很简单:

 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