Ich frage mich nur, ob es eine Methode gibt, um eine Zeichenfolge aus einer anderen Zeichenfolge zu entfernen. Etwas wie das:
class String
def remove(s)
self[s.length, self.length - s.length]
end
end
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#method-i-slice-21
[]
s auch für die Non-Bang-Version verwenden."foobar".tap{|s| s.slice!("foo")}.upcase
delete
würde nicht funktionieren, da es alle Zeichen löscht, die Sie übergeben:'hello world'.delete('hello') #=> ' wrd'
Wie wäre es mit
str.gsub("subString", "")
dem Ruby Docquelle
sub
wäre angemessener alsgsub
, da das OP nur den Teilstring vom Anfang des Strings entfernen möchte , nicht den gesamten String (siehe seinen Beispielcode). Und die Verwendung eines solchen regulären Ausdrucks wäre besser:str.sub(/^subString/, '')
- weil dadurch sichergestellt wird, dass der Teilstring definitiv nur von Anfang an entfernt wird.subString
sind, dass keine regulären Ausdruckszeichen enthalten sind./^subString/
ein Literal, daher können wir sehr sicher sein, dass es keine Metazeichen enthält. Wenn Sie eine andere Zeichenfolge durch eine Regex ersetzen, können Sie Folgendes tun :/#{Regexp.escape(str)}/
.Regexp.escape()
.Wenn es das Ende der Zeichenfolge ist, können Sie auch Folgendes verwenden
chomp
:quelle
chomp
in Kombination mit verwendenreverse
:"hello".reverse.chomp("he".reverse).reverse #=> "llo"
Wenn Sie nur ein Vorkommen der Zielzeichenfolge haben, können Sie Folgendes verwenden:
oder
Wenn Sie mehrere Ziele verwenden:
Zum Beispiel:
Wenn Sie direkte Ersetzungen vornehmen müssen, verwenden Sie die
"!"
Versionen vongsub!
undsub!
.quelle
asdf['bar'] = ''
Wenn Sie Rails verwenden, gibt es auch
remove
.ZB
"Testmessage".remove("message")
ergibt"Test"
.Warnung: Diese Methode entfernt alle Vorkommen
quelle
slice
Methode nicht den Teil der Schnur zurück, der in Scheiben geschnitten wurde, sondern das "Messer"slice!
def gimme_the_slice(my_string, my_slice) my_string.slice!(my_slice) my_string
Ruby 2.5+
Wenn sich Ihre Teilzeichenfolge am Anfang am Ende einer Zeichenfolge befindet, hat Ruby 2.5 die folgenden Methoden eingeführt:
quelle
Wenn Sie Schienen verwenden oder weniger aktiv sind, erhalten Sie String # remove und String # remove! Methode
Quelle: http://api.rubyonrails.org/classes/String.html#method-i-remove
quelle
Wenn ich richtig interpretiere, scheint diese Frage nach einer Minusoperation (-) zwischen Zeichenfolgen zu fragen, dh nach dem Gegenteil der integrierten Plusoperation (+) (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 benötigen nur drei integrierte 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, jeweils eine Methode auszuführen.
Hier ist ein Proof-of-Concept-Code:
Ein letzter Ratschlag, wenn Sie eine aktuelle Ruby-Version verwenden (> = 2.0): Verwenden Sie Verfeinerungen anstelle von Affen-Patching-Zeichenfolgen wie im vorherigen Beispiel.
Es ist so einfach wie:
und fügen Sie
using MinusString
vor den Blöcken hinzu, wo Sie es brauchen.quelle
Hier ist was ich tun würde
In mehreren Zeilen formatiert:
quelle
quelle
Ö
zum Beispiel nicht darum gebeten, es zu entfernen .