¿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")}.upcase
delete
no 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
sub
serí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.subString
que 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
chomp
en 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
slice
mé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_string
Ruby 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 MinusString
antes de los bloques donde lo necesite.fuente
esto es lo que haría
Formateado en múltiples líneas:
fuente
fuente
Ö
por ejemplo.