¿Me pregunto si hay algún método para eliminar una cadena de otra cadena? Algo como esto:
class String
  def remove(s)
    self[s.length, self.length - s.length]
  end
end
                Puedes usar el método de corte:
a = "foobar"
a.slice! "foo"
=> "foo"
a
=> "bar"
hay un no '!' versión también. También se puede ver más información en la documentación sobre otras versiones: http://www.ruby-doc.org/core/classes/String.html#method-i-slice-21
[]s para la versión no explosiva."foobar".tap{|s| s.slice!("foo")}.upcasedeleteno funcionaría, ya que elimina todos los caracteres que pasas:'hello world'.delete('hello') #=> ' wrd'¿Qué tal si
str.gsub("subString", "")echas un vistazo al Ruby Doc?fuente
subsería más apropiado quegsub, ya que el OP solo quiere eliminar la subcadena desde el comienzo de la cadena, no todo a través de la cadena (mira su código de muestra). Y usar una expresión regular, como esta, sería mejor:str.sub(/^subString/, '')- porque asegura que la subcadena definitivamente se eliminará solo desde el principio.subStringque no incluye ningún carácter especial de expresión regular./^subString/es un literal, por lo que podemos estar muy seguros de que no incluye metacaracteres. Si está sustituyendo alguna otra cadena en una expresión regular, usted puede hacer esto:/#{Regexp.escape(str)}/.Regexp.escape(), sin embargo.Si es el final de la cadena, también puede usar
chomp:fuente
chompen combinación conreverse:"hello".reverse.chomp("he".reverse).reverse #=> "llo"Si solo tiene una aparición de la cadena de destino, puede usar:
o
Si tiene múltiples ocurrencias de uso objetivo:
Por ejemplo:
Si necesita hacer sustituciones en el lugar, use las
"!"versiones degsub!ysub!.fuente
asdf['bar'] = ''Si está utilizando Rails también hay
remove.Por ejemplo,
"Testmessage".remove("message")rendimientos"Test".Advertencia: este método elimina todas las ocurrencias
fuente
slicemétodo no devuelve la porción de la cuerda que se ha cortado, devuelve el "cuchillo"slice!def gimme_the_slice(my_string, my_slice) my_string.slice!(my_slice) my_stringRuby 2.5+
Si su subcadena está al principio o al final de una cadena, Ruby 2.5 ha introducido los métodos para esto:
fuente
Si está utilizando rieles o con un soporte menos activo, obtendrá String # remove y String # remove. método
fuente: http://api.rubyonrails.org/classes/String.html#method-i-remove
fuente
Si estoy interpretando bien, esta pregunta parece pedir algo así como una operación menos (-) entre cadenas, es decir, lo opuesto a la operación incorporada más (+) (concatenación).
A diferencia de las respuestas anteriores, estoy tratando de definir una operación que deba obedecer la propiedad:
SI c = a + b ENTONCES c - a = b Y c - b = a
Solo necesitamos tres métodos de Ruby integrados para lograr esto:
'abracadabra'.partition('abra').values_at(0,2).join == 'cadabra'.No explicaré cómo funciona porque se puede entender fácilmente ejecutando un método a la vez.
Aquí hay un código de prueba de concepto:
Un último consejo si está utilizando una versión reciente de Ruby (> = 2.0): use Refinamientos lugar de Cadenas de parches de mono como en el ejemplo anterior.
Es tan fácil como:
y agregue
using MinusStringantes de los bloques donde lo necesite.fuente
esto es lo que haría
Formateado en múltiples líneas:
fuente
fuente
Öpor ejemplo.