Eu estou apenas querendo saber se existe algum método para remover string de outra string? Algo assim:
class String
def remove(s)
self[s.length, self.length - s.length]
end
end
Você pode usar o método de fatia:
a = "foobar"
a.slice! "foo"
=> "foo"
a
=> "bar"
existe um não '!' versão também. Mais informações podem ser vistas na documentação sobre outras versões: http://www.ruby-doc.org/core/classes/String.html#method-i-slice-21
[]
s para a versão non-bang."foobar".tap{|s| s.slice!("foo")}.upcase
delete
não funcionaria, pois exclui todos os caracteres que você digita : #'hello world'.delete('hello') #=> ' wrd'
Que tal
str.gsub("subString", "")
Confira o Doc Rubyfonte
sub
seria mais apropriado do quegsub
, já que o OP deseja remover a substring desde o início da string, não toda a string (veja seu código de exemplo). E usar um regex, como este, seria melhor:str.sub(/^subString/, '')
- porque garante que a substring será definitivamente removida apenas desde o início.subString
que não inclui nenhum caractere especial de regex./^subString/
é literal, portanto podemos ter certeza de que não inclui nenhum metacaractere. Se você estiver substituindo alguma outra string em uma regex, você pode fazer isso:/#{Regexp.escape(str)}/
.Regexp.escape()
, no entanto.Se for o fim da cadeia, você também pode usar
chomp
:fonte
chomp
em combinação comreverse
:"hello".reverse.chomp("he".reverse).reverse #=> "llo"
Se você tiver apenas uma ocorrência da sequência de destino, poderá usar:
ou
Se você tiver várias ocorrências de uso de destino:
Por exemplo:
Se você precisar fazer substituições no local, use as
"!"
versões degsub!
esub!
.fonte
asdf['bar'] = ''
Se você estiver usando o Rails, também há
remove
.Por exemplo,
"Testmessage".remove("message")
rendimentos"Test"
.Aviso: este método remove todas as ocorrências
fonte
slice
método não retorna a parte da cadeia de caracteres que é cortado, ele retorna a "faca"slice!
def gimme_the_slice(my_string, my_slice) my_string.slice!(my_slice) my_string
Ruby 2.5+
Se sua substring está no início de no final de uma string, o Ruby 2.5 introduziu os métodos para isso:
fonte
Se você estiver usando trilhos ou com menos suporte ativo, você receberá as String # remove e String # remove! método
fonte: http://api.rubyonrails.org/classes/String.html#method-i-remove
fonte
Se estou interpretando corretamente, essa pergunta parece pedir algo como uma operação de menos (-) entre seqüências de caracteres, ou seja, o oposto da operação interna de mais (+) (concatenação).
Diferentemente das respostas anteriores, estou tentando definir uma operação que deve obedecer à propriedade:
Se c = a + b ENTÃO c - a = b AND c - b = a
Precisamos apenas de três métodos Ruby internos para conseguir isso:
'abracadabra'.partition('abra').values_at(0,2).join == 'cadabra'
.Não vou explicar como funciona, porque pode ser facilmente entendido executando um método de cada vez.
Aqui está uma prova de código de conceito:
Um último conselho, se você estiver usando uma versão recente do Ruby (> = 2.0): use Refinements vez de String de correção de macacos, como no exemplo anterior.
É tão fácil quanto:
e adicione
using MinusString
antes dos blocos onde você precisar.fonte
aqui está o que eu faria
Formatado em várias linhas:
fonte
fonte
Ö
por exemplo.