¿Cuál es la forma preferida de eliminar los últimos caracteres n
de una cadena?Ruby, elimina los últimos N caracteres de una cadena?
Respuesta
Si los caracteres que desea eliminar son siempre los mismos caracteres, y luego considerar chomp
:
'abc123'.chomp('123') # => "abc"
Las ventajas de chomp
son: no contar, y el código se comunica con más claridad lo que está haciendo.
Sin argumentos, chomp
elimina el final de línea DOS o Unix, si cualquiera de estos casos:
"abc\n".chomp # => "abc"
"abc\r\n".chomp # => "abc"
De los comentarios, no era una cuestión de la velocidad de la utilización de #chomp
frente a la utilización de una distancia. Aquí es un punto de referencia la comparación de los dos:
require 'benchmark'
S = 'asdfghjkl'
SL = S.length
T = 10_000
A = 1_000.times.map { |n| "#{n}#{S}" }
GC.disable
Benchmark.bmbm do |x|
x.report('chomp') { T.times { A.each { |s| s.chomp(S) } } }
x.report('range') { T.times { A.each { |s| s[0...-SL] } } }
end
Resultados de referencia (utilizando CRuby 2.13p242):
Rehearsal -----------------------------------------
chomp 1.540000 0.040000 1.580000 ( 1.587908)
range 1.810000 0.200000 2.010000 ( 2.011846)
-------------------------------- total: 3.590000sec
user system total real
chomp 1.550000 0.070000 1.620000 ( 1.610362)
range 1.970000 0.170000 2.140000 ( 2.146682)
Así Chomp es más rápido que el uso de una gama, por ~ 22%.
Chop también es una opción. Es menos quisquilloso sobre lo que se elimina. –
algorítmicamente, ¿no sería algo así como [0 ..- #] más rápido? un chomp tiene que analizar una cuerda buscando fósforos. Excluir y finalizar el número de char no. – Plasmarob
@Plasmarob, eso sería una buena referencia. –
str = str[0...-n]
Tenga en cuenta que esto sólo funciona en Ruby 1.9. En Ruby 1.8, esto eliminará los últimos * bytes *, no los últimos * caracteres *. –
Esto es mejor que la respuesta elegida, ya que 3 puntos (...) es más fácil de memorizar ya que -n significa sacar n caracteres del final de la cadena. – lulalala
también "abcd" [0 ..- 2] # => "abc" mientras que "abcd" [0 ...- 2] # => "ab". En mi opinión, la opción de rango de 3 puntos resulta en un código más explicativo. – mokagio
Salida el método de "corte":
en cuenta que esto sólo funciona en Ruby 1.9. En Ruby 1.8, esto eliminará los últimos * bytes *, no los últimos * caracteres *. –
irb> 'now is the time'[0...-4]
=> "now is the "
Tenga en cuenta que esto solo funciona en Ruby 1.9. En Ruby 1.8, esto eliminará los últimos * bytes *, no los últimos * caracteres *. –
Pero probablemente quiso decir * "bytes" * si usa 1.8.x. – DigitalRoss
Esto funciona, pero estoy descubriendo que 'abc123'.chomp (' 123 ') es el doble de rápido tanto para cadenas cortas como largas. (Ruby 2.0.0-p247) ¿Alguien puede confirmar esto? – Plasmarob
Siempre se puede usar algo como
"string".sub!(/.{X}$/,'')
Dónde X
es el número de caracteres que desea eliminar.
O con la asignación de/con el resultado:
myvar = "string"[0..-X]
donde X
es el número de caracteres más uno de eliminar.
x = "my_test"
last_char = x.split('').last
pregunta sobre eliminar los últimos N caracteres de una cadena, no sobre encontrar el último carácter – unnitallman
Yo sugeriría chop
. Creo que ha sido mencionado en uno de los comentarios, pero sin enlaces ni explicaciones, así que he aquí por qué creo que es mejor:
Simplemente elimina el último carácter de una cadena y no tiene que especificar ningún valor para eso ocurrir.
Si necesita eliminar más de un carácter, entonces chomp
es su mejor opción. Esto es lo que el ruby docs tienen que decir sobre chop
:
devuelve una nueva cadena con el último carácter eliminado. Si la cadena termina con \ r \ n, se eliminan ambos caracteres. Al aplicar chop en una cadena vacía, se devuelve una cadena vacía.Cadena # Chomp es a menudo una alternativa más segura , ya que deja la cadena sin cambios si no termina en un separador registro.
Aunque esto se utiliza sobre todo para eliminar los separadores como \r\n
Lo he utilizado para eliminar el último carácter de una cadena simple, por ejemplo, el s
para hacer la palabra singular.
¿No eliminaría ese único último carácter? La pregunta es sobre "personajes" en plural – maetthew
Sí, tienes razón, pero chomp ("caracteres") eliminará los últimos "caracteres". No estaba claro si el OP quería caracteres específicos o solo N caracteres. – kakubei
Gracioso, esta es la respuesta correcta – Amala
name = "my text"
x.times do name.chop! end
Aquí en la consola:
>name = "Nabucodonosor"
=> "Nabucodonosor"
> 7.times do name.chop! end
=> 7
> name
=> "Nabuco"
si está utilizando rieles, probar:
"my_string".last(2) # => "ng"
[Editado]
Para obtener la cadena sin los 2 últimos caracteres :
n = "my_string".size
"my_string"[0..n-3] # => "my_stri"
Nota: el último carácter de cadena está en n-1. Entonces, para eliminar los últimos 2, usamos n-3.
Esto no elimina las dos últimas letras. Los devuelve. –
No es necesario que mida la cadena primero, ruby usa índices negativos desde el final de la cadena de forma nativa –
Si estás bien con la creación de métodos de clase y desea que los caracteres que cortar, intente esto:
class String
def chop_multiple(amount)
amount.times.inject([self, '']){ |(s, r)| [s.chop, r.prepend(s[-1])] }
end
end
hello, world = "hello world".chop_multiple 5
hello #=> 'hello '
world #=> 'world'
Desconexión de la última n
personajes es lo mismo que mantener los primeros length - n
caracteres.
Soporte activa incluye String#first
y String#last
métodos que proporcionan una manera conveniente de mantener o dejar caer los primeros/últimos n
caracteres:
require 'active_support/core_ext/string/access'
"foobarbaz".first(3) # => "foo"
"foobarbaz".first(-3) # => "foobar"
"foobarbaz".last(3) # => "baz"
"foobarbaz".last(-3) # => "barbaz"
Esta es la respuesta correcta. – alex
@alex: es la respuesta correcta para Rails. –
El uso de expresiones regulares:
str = 'string'
n = 2 #to remove last n characters
str[/\A.{#{str.size-n}}/] #=> "stri"
- 1. ¿Cómo elimino los últimos n caracteres de una cadena?
- 2. Extrayendo los últimos n caracteres de una cadena en R
- 3. Cómo comparar los últimos n caracteres de una cadena con otra cadena en C
- 4. cortar los últimos caracteres
- 5. Extracción de los dos últimos caracteres de una cadena numérica
- 6. Python Eliminar los últimos 3 caracteres de una cadena
- 7. Obtener los 4 últimos caracteres de una cadena
- 8. Modificar los dos últimos caracteres de una cadena en Perl
- 9. Eliminación de los últimos caracteres en una cadena XSLT
- 10. objetivo-c obtener los últimos 2 caracteres de una cadena?
- 11. Obtenga los últimos 5 caracteres en una cadena
- 12. Scala: obtenga los últimos dos caracteres de la cadena
- 13. xcode corta los últimos caracteres de la cadena
- 14. Devolviendo los primeros N caracteres de una cadena Unicode
- 15. cómo cortar los últimos n bytes de una cadena en corte de cadena bash?
- 16. hacer una cadena de N caracteres
- 17. Recortar los últimos 4 caracteres de la cadena?
- 18. ¿Cómo eliminar los dos primeros y los últimos dos caracteres en una cadena?
- 19. ¿Cómo puedo obtener últimos caracteres de una cadena utilizando JavaScript
- 20. expresión regular: extraer los últimos 2 caracteres
- 21. Eliminar los últimos dos caracteres de una columna en MySQL
- 22. Eliminar los últimos N caracteres del campo en una base de datos SQL Server
- 23. Cómo obtener los últimos caracteres en una cadena en Java, independientemente del tamaño de cadena
- 24. últimos caracteres de una cadena K en Perl
- 25. Rieles 3- Recuperar los últimos N registros
- 26. ¿Cómo guardo una lista de solo los últimos n objetos?
- 27. Eliminar los últimos N bytes del archivo
- 28. Python Ordenar últimos caracteres
- 29. Devuelve los primeros N caracteres de la cadena
- 30. Eliminando N primeros caracteres de la cadena
Ver también: [¿qué es el mejor manera de eliminar los últimos n caracteres de una cadena (en Ruby)?] (http://stackoverflow.com/q/3059803/1591669) – unor