¿Cómo elimino el segundo carácter de una cadena?

Si quiero eliminar el último carácter de una cadena, simplemente uso

'string'[0..-1]

Pero, ¿cómo elimino el segundo carácter de una cadena?

preguntado el 22 de mayo de 12 a las 18:05

No quiero votar en contra porque no quiero ser malo, pero ¿alguna vez lo pensaste? ¿O leyó algún libro o documentación? -

'string'[0..-1] no elimina el carácter. Devuelve todos los caracteres hasta el final de la cadena. 'string'[0..-1] => "string" -

4 Respuestas

La forma más fácil es

str[1] = ''   #1.9.3

or

str[1,1] = '' #1.8.7

No estoy seguro de si funcionará en Jruby porque tiene una forma diferente de manipular la cadena. Si no funciona, use el método de @Finbarr y debería funcionar.

contestado el 22 de mayo de 12 a las 23:05

al lado de la pregunta ¿Cómo puede ser importante ahora cuál es el más rápido método.

¡Hice un punto de referencia con las otras respuestas y con una solución con slice! y sub!.

require 'benchmark'
N = 100_000 #Number of Test loop

STR = '0123456789'

REGEXP = /\A(.)./
Benchmark.bmbm(10) {|b|

  b.report('str[0].chr+str[2..-1]') { N.times { 
        str = STR.dup
        str = str[0].chr+str[2..-1]
      }}
  b.report('str[1]') { N.times { 
        str = STR.dup
        str[1] = ''
      }}
  b.report('slice!') { N.times { 
        str = STR.dup
        str.slice!(1)
      }}          
  b.report('sub!') { N.times { 
        str = STR.dup
        str.sub!(/\A(.)./, '\1')
      }}          
  b.report('sub!/REGEXP') { N.times { 
        str = STR.dup
        str.sub!(REGEXP, '\1')  #Avoid reinitialization of regex for each loop
      }}
} #Benchmark

Mis resultados (Windows, Ruby 1.9.3)

Rehearsal ---------------------------------------------------------
str[0].chr+str[2..-1]   0.203000   0.000000   0.203000 (  0.171875)
str[1]                  0.094000   0.000000   0.094000 (  0.109375)
slice!                  0.094000   0.000000   0.094000 (  0.125000)
sub!                    0.250000   0.016000   0.266000 (  0.265625)
sub!/REGEXP             0.265000   0.016000   0.281000 (  0.234375)
------------------------------------------------ total: 0.938000sec

                            user     system      total        real
str[0].chr+str[2..-1]   0.188000   0.000000   0.188000 (  0.171875)
str[1]                  0.125000   0.000000   0.125000 (  0.109375)
slice!                  0.172000   0.000000   0.172000 (  0.125000)
sub!                    0.218000   0.015000   0.233000 (  0.265625)
sub!/REGEXP             0.282000   0.000000   0.282000 (  0.250000)

contestado el 22 de mayo de 12 a las 20:05

Supongo que te refieres a eliminar el segundo carácter y mantener el resto de la cadena.

hola => hola

s[0].chr+s[2..-1]

contestado el 22 de mayo de 12 a las 19:05

sin = 'string'
sout = sin[0] + sin[2..-1]

contestado el 22 de mayo de 12 a las 19:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.