it-swarm.com.de

Teilstring aus dem String entfernen

Ich frage mich nur, ob es eine Methode gibt, um String aus einem anderen String zu entfernen? Etwas wie das:

class String
  def remove(s)
    self[s.length, self.length - s.length]
  end
end
169
demas

Sie können die Slice-Methode verwenden:

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

es gibt ein nicht '!' Version auch. Weitere Informationen finden Sie auch in der Dokumentation zu anderen Versionen: http://www.Ruby-doc.org/core/classes/String.html#M001213

237
Pete

Wie wäre es mit str.gsub("subString", "") Überprüfen Sie den Ruby Doc

145
Piyush Mattoo

Wenn es das Ende der Zeichenfolge ist, können Sie auch chomp verwenden:

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

Wenn Sie nur einen Vorkommen der Zielzeichenfolge haben, können Sie Folgendes verwenden:

str[target] = ''

oder

str.sub(target, '')

Wenn Sie mehrfach vorkommen, verwenden Sie Folgendes:

str.gsub(target, '')

Zum Beispiel:

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 "

Wenn Sie direkte Ersetzungen vornehmen müssen, verwenden Sie die "!"-Versionen von gsub! und sub!.

42
the Tin Man

Wenn Sie Rails verwenden, gibt es auch remove .

Z.B. "Testmessage".remove("message") ergibt "Test".

Warnung: Diese Methode entfernt alle Vorkommen

19
edwardmp

Befindet sich Ihr Teilstring am Anfang eines Strings, hat Ruby 2.5 die folgenden Methoden eingeführt:

  • delete_prefix zum Entfernen eines Teilstrings vom Anfang des Strings
  • delete_suffix zum Entfernen eines Teilstrings vom Ende des Strings
11
Igor Drozdov

Wenn Sie Rails oder weniger aktive Unterstützung verwenden, erhalten Sie String # remove und String # remove! Methode 

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

  self
end

quelle: http://api.rubyonrails.org/classes/String.html#method-i-remove

2
Dinatih

Wenn ich richtig interpretiere, scheint diese Frage nach einer Minus-Operation (-) zwischen Zeichenfolgen zu fragen, d. H. Nach dem Gegenteil der eingebauten Plus-Operation (+) (Verkettung).

Im Gegensatz zu den vorherigen Antworten versuche ich, eine solche Operation zu definieren, die der Eigenschaft gehorchen muss:

WENN c = a + b DANN c - a = b UND c - b = a

Wir brauchen nur drei eingebaute Ruby Methoden, um dies zu erreichen:

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

Ich werde nicht erklären, wie es funktioniert, da es leicht zu verstehen ist, wenn eine Methode zur Zeit ausgeführt wird.

Hier ist ein Proof-of-Concept-Code:

# 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

Ein letzter Ratschlag, wenn Sie eine neuere Ruby Version (> = 2.0) verwenden: Verwenden Sie Verfeinerungen anstelle von Monkey-Patching String wie im vorherigen Beispiel.

Es ist so einfach wie:

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

und füge using MinusString vor den Blöcken, wo Sie es brauchen.

1