Мне просто интересно, если есть какой-либо метод для удаления строки из другой строки? Что-то вроде этого:
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#method-i-slice-21
[]
s для версии без взрыва."foobar".tap{|s| s.slice!("foo")}.upcase
delete
не будет работать, так как удаляет все символы, которые вы передаете:'hello world'.delete('hello') #=> ' wrd'
Как насчет
str.gsub("subString", "")
проверить Ruby Docисточник
sub
было бы более подходящим, чемgsub
, поскольку OP хочет удалить только подстроку из начала строки, а не всю строку (см. его пример кода). И использование регулярного выражения, как это, было бы лучше:str.sub(/^subString/, '')
- потому что это гарантирует, что подстрока будет определенно удалена только с самого начала.subString
что в нем нет специальных символов регулярного выражения./^subString/
является литералом, поэтому мы можем быть уверены, что он не содержит метасимволов. Если вы подставляя некоторую другую строку в регулярное выражение, вы можете сделать это:/#{Regexp.escape(str)}/
.Regexp.escape()
, хотя.Если это конец строки, вы также можете использовать
chomp
:источник
chomp
в сочетании сreverse
:"hello".reverse.chomp("he".reverse).reverse #=> "llo"
Если у вас есть только одно вхождение целевой строки, вы можете использовать:
или
Если у вас есть несколько случаев использования цели:
Например:
Если вам нужно сделать замену на месте, используйте
"!"
версииgsub!
иsub!
.источник
asdf['bar'] = ''
Если вы используете Rails, есть также
remove
.Например,
"Testmessage".remove("message")
дает"Test"
.Предупреждение: этот метод удаляет все вхождения
источник
slice
метод не возвращает отрезанную часть строки, он возвращает «нож»slice!
def gimme_the_slice(my_string, my_slice) my_string.slice!(my_slice) my_string
Ruby 2.5+
Если ваша подстрока находится в начале или в конце строки, то Ruby 2.5 представил методы для этого:
источник
Если вы используете рельсы или используете менее активную поддержку, вы получаете String # remove и String # remove! метод
источник: http://api.rubyonrails.org/classes/String.html#method-i-remove
источник
Если я правильно интерпретирую, этот вопрос, по-видимому, требует что-то вроде операции минус (-) между строками, то есть противоположности встроенной операции плюс (+) (конкатенация).
В отличие от предыдущих ответов, я пытаюсь определить такую операцию, которая должна подчиняться свойству:
ЕСЛИ c = a + b ТО c - a = b И c - b = a
Нам нужно всего три встроенных метода Ruby:
'abracadabra'.partition('abra').values_at(0,2).join == 'cadabra'
,Я не буду объяснять, как это работает, потому что это легко понять, запуская один метод за раз.
Вот подтверждение концепции кода:
Последний совет, если вы используете последнюю версию Ruby (> = 2.0): используйте Refinements вместо Monkey-Patching String, как в предыдущем примере.
Это так же просто, как:
и добавьте
using MinusString
перед блоками, где вам это нужно.источник
вот что я бы сделал
Отформатирован в несколько строк:
источник
источник
Ö
например.