Supprimer la sous-chaîne de la chaîne

Je me demande simplement s’il existe une méthode pour supprimer une chaîne d’une autre chaîne? Quelque chose comme ça:

class Ssortingng def remove(s) self[s.length, self.length - s.length] end end 

    Vous pouvez utiliser la méthode de tranche:

     a = "foobar" a.slice! "foo" => "foo" a => "bar" 

    il y a un non ‘!’ version aussi. Plus d’informations peuvent être vues dans la documentation sur d’autres versions aussi: http://www.ruby-doc.org/core/classes/Ssortingng.html#M001213

    Que diriez-vous de str.gsub("subSsortingng", "") Découvrez le Ruby Doc

    Si c’est la fin de la chaîne, vous pouvez aussi utiliser chomp :

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

    Si vous n’avez qu’une occurrence de la chaîne cible, vous pouvez utiliser:

     str[target] = '' 

    ou

     str.sub(target, '') 

    Si vous avez plusieurs occurrences d’utilisation de la cible:

     str.gsub(target, '') 

    Par exemple:

     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 " 

    Si vous devez effectuer des substitutions sur place, utilisez le "!" versions de gsub! et sub! .

    Si vous utilisez Rails, vous remove également remove .

    Par exemple, "Testmessage".remove("message") "Test" .

    Attention: cette méthode supprime toutes les occurrences

    Si votre sous-chaîne est au début d’une chaîne, alors Ruby 2.5 a introduit les méthodes suivantes:

    • delete_prefix pour supprimer une sous-chaîne du début de la chaîne
    • delete_suffix pour supprimer une sous-chaîne de la fin de la chaîne

    Si vous utilisez des rails ou moins actifs, vous obtenez Ssortingng # remove et Ssortingng # remove! méthode

     def remove!(*patterns) patterns.each do |pattern| gsub! pattern, "" end self end 

    source: http://api.rubyonrails.org/classes/Ssortingng.html#method-i-remove

    Si j’interprète bien, cette question semble demander quelque chose comme une opération moins (-) entre les chaînes, c’est-à-dire l’opposé de l’opération plus (+) intégrée (concaténation).

    Contrairement aux réponses précédentes, j’essaie de définir une telle opération qui doit obéir à la propriété:

    IF c = a + b ALORS c – a = b ET c – b = a

    Pour ce faire, nous n’avons besoin que de trois méthodes Ruby intégrées:

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

    Je n’expliquerai pas comment cela fonctionne car il est facile de comprendre comment exécuter une méthode à la fois.

    Voici un code de preuve de concept:

     # minus_ssortingng.rb class Ssortingng def -(str) partition(str).values_at(0,2).join end end # Add the following code and issue 'ruby minus_ssortingng.rb' in the console to test require 'minitest/autorun' class MinusSsortingng_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 

    Un dernier conseil si vous utilisez une version récente de Ruby (> = 2.0): utilisez Refinements au lieu du patch de singe comme dans l'exemple précédent.

    C'est aussi simple que:

     module MinusSsortingng refine Ssortingng do def -(str) partition(str).values_at(0,2).join end end end 

    et append en using MinusSsortingng avant les blocs où vous en avez besoin.

    voici ce que je ferais

     2.2.1 :015 > class Ssortingng; 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!" 

    Formaté sur plusieurs lignes:

     class Ssortingng 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