Leer los últimos 3 caracteres = una cosa, eliminar los últimos 3 caracteres = otra. ¿Cual?
Kieren Johnstone
Respuestas:
234
leer los últimos 3 caracteres de la cadena [Pregunta inicial]
Puede usar string.Substring y darle el índice inicial y obtendrá la subcadena desde el índice dado hasta el final.
myString.Substring(myString.Length-3)
Recupera una subcadena de esta instancia. La subcadena comienza en una posición de carácter especificada. MSDN
Editar , para publicación actualizada
Eliminar los últimos 3 caracteres de la cadena [pregunta actualizada]
Para eliminar los últimos tres caracteres de la cadena, puede usar string.Substring (Int32, Int32) y darle el índice inicial 0y el índice final tres menos que la longitud de la cadena . Obtendrá la subcadena antes de los últimos tres caracteres.
Recupera una subcadena de esta instancia. La subcadena comienza en una posición de carácter especificada y tiene una longitud especificada.
También puede usar el método String.Remove (Int32) para eliminar los últimos tres caracteres pasando el índice de inicio como longitud - 3 , se eliminará desde este punto hasta el final de la cadena.
Devuelve una nueva cadena en la que se han eliminado todos los caracteres de la instancia actual, comenzando en una posición especificada y continuando hasta la última posición.
Gracias @braks, la pregunta que se hizo inicialmente fue "leer los últimos 3 caracteres de la cadena" Esto se editó más tarde y no lo sabía, ver el historial de edición de preguntas. Su comentario me ayudó a corregir mi respuesta que se volvió incorrecta después de editar la pregunta.
Este es bastante "creativo", ya que no necesita la longitud de la cuerda, pero la operación inversa es probablemente más cara.
Aleksandar
4
Invertir una cadena es definitivamente más caro que contar sus caracteres. Es necesario construir una cadena completamente nueva, luego copiar la original en ella, luego la cadena original debe ser recolectada como basura.
Matt Gregory
Las cadenas de @MattGregory son inmutables: eliminar, subcadena, cualquier función de cadena genera una nueva cadena. Sobrescribir el puntero original siempre provoca la recolección de basura. Sin embargo, esto es aún más lento, ya que Enumerable.Reversealmacena la cadena en un char[]búfer, luego se almacena en un búfer nuevo char[]que es 3 más corto y luego genera un nuevo string(internamente con otro char[]). Un mejor enfoque sería new string("hello".Reverse().Skip(3)), o simplemente escribir su propia función de extensión de cadena AllBut(this string in, int i)que usa Substring.
Wolfzoon
@MattGregory Ni siquiera está "contando" los caracteres de una cadena, una cadena tiene su Lengthalmacenado.
Wolfzoon
1
Ahora también tenemos .SkipLast(n). No es necesario invertir nada. "hello".SkipLast(3)da"he"
Fácil. text = text.remove(text.length - 3). Reste 3 porque la Removefunción elimina todos los elementos de ese índice hasta el final de la cadena que es text.length. Entonces, si resto 3, obtengo la cadena con 3 caracteres eliminados.
Puede generalizar esto para eliminar acaracteres del final de la cadena, así:
text = text.remove(text.length - a)
Entonces, lo que hice fue la misma lógica. La removefunción elimina todos los elementos desde el interior hasta el final de la cadena, que es la longitud del texto. Entonces, si resto ade la longitud de la cadena, eso me dará la cadena con los acaracteres eliminados.
Por lo tanto, no solo funciona para 3, funciona para todos los enteros positivos, excepto si la longitud de la cadena es menor o igual a a, en ese caso devolverá un número negativo o 0.
Respuestas:
Puede usar string.Substring y darle el índice inicial y obtendrá la subcadena desde el índice dado hasta el final.
Editar , para publicación actualizada
Para eliminar los últimos tres caracteres de la cadena, puede usar string.Substring (Int32, Int32) y darle el índice inicial
0
y el índice final tres menos que la longitud de la cadena . Obtendrá la subcadena antes de los últimos tres caracteres.Método String.Substring (Int32, Int32)
También puede usar el método String.Remove (Int32) para eliminar los últimos tres caracteres pasando el índice de inicio como longitud - 3 , se eliminará desde este punto hasta el final de la cadena.
Método String.Remove (Int32)
fuente
fuente
Leí todo esto, pero quería algo un poco más elegante. Solo para eliminar una cierta cantidad de caracteres del final de una cadena:
salida:
fuente
Enumerable.Reverse
almacena la cadena en unchar[]
búfer, luego se almacena en un búfer nuevochar[]
que es 3 más corto y luego genera un nuevostring
(internamente con otrochar[]
). Un mejor enfoque seríanew string("hello".Reverse().Skip(3))
, o simplemente escribir su propia función de extensión de cadenaAllBut(this string in, int i)
que usa Substring.Length
almacenado..SkipLast(n)
. No es necesario invertir nada."hello".SkipLast(3)
da"he"
fuente
myString = myString.Remove(myString.Length - 3)
es decir.fuente
Puede utilizar
String.Remove
para eliminar desde una posición especificada hasta el final de la cadena.fuente
Probablemente no sea exactamente lo que está buscando, ya que dice que son "datos dinámicos", pero dada su cadena de ejemplo, esto también funciona:
fuente
str= str.Remove(str.Length - 3);
fuente
Aquí hay ejemplos de subcadenas. >>
http://www.dotnetperls.com/substring
Refiera esos.
fuente
fuente
Eliminar los últimos caracteres de una cadena
.Text.Remove(10)
// se usa para eliminar texto desde el índice 10 hasta el finalfuente
El nuevo operador de la gama C # 8.0 puede ser un gran atajo para lograrlo.
Ejemplo:
fuente
string.Remove()
elimina todos los elementos de ese índice hasta el final.items.length - 3
obtiene el índice de 3 caracteres desde el finalfuente
Fácil.
text = text.remove(text.length - 3)
. Reste 3 porque laRemove
función elimina todos los elementos de ese índice hasta el final de la cadena que estext.length
. Entonces, si resto 3, obtengo la cadena con 3 caracteres eliminados.Puede generalizar esto para eliminar
a
caracteres del final de la cadena, así:Entonces, lo que hice fue la misma lógica. La
remove
función elimina todos los elementos desde el interior hasta el final de la cadena, que es la longitud del texto. Entonces, si restoa
de la longitud de la cadena, eso me dará la cadena con losa
caracteres eliminados.Por lo tanto, no solo funciona para 3, funciona para todos los enteros positivos, excepto si la longitud de la cadena es menor o igual a
a
, en ese caso devolverá un número negativo o 0.fuente