Eliminar los últimos tres caracteres de una cadena


122

Quiero eliminar los últimos tres caracteres de una cadena:

string myString = "abcdxxx"; 

Tenga en cuenta que la cadena son datos dinámicos.


1
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.

myString = myString.Substring(0, myString.Length-3);

Método String.Substring (Int32, Int32)

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.

myString = myString.Remove(myString.Length-3)

Método String.Remove (Int32)

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.


13
esta no es la respuesta
frena el

21
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.
Adil

26
myString = myString.Remove(myString.Length - 3, 3);

13

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:

string.Concat("hello".Reverse().Skip(3).Reverse());

salida:

"he"

7
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"
AjitZero



5

Puede utilizar String.Removepara eliminar desde una posición especificada hasta el final de la cadena.

myString = myString.Remove(myString.Length - 3);

4

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:

? "abcdxxx".TrimEnd('x');
"abc"



2
   string myString = "abcdxxx";
   if (myString.Length<3)
      return;
   string newString=myString.Remove(myString.Length - 3, 3);

1

Eliminar los últimos caracteres de una cadena

TXTB_DateofReiumbursement.Text = (gvFinance.SelectedRow.FindControl("lblDate_of_Reimbursement") as Label).Text.Remove(10)

.Text.Remove(10)// se usa para eliminar texto desde el índice 10 hasta el final


1

El nuevo operador de la gama C # 8.0 puede ser un gran atajo para lograrlo.

Ejemplo:

var shortenedString = myString[0..^1]

0
items.Remove(items.Length - 3)

string.Remove()elimina todos los elementos de ese índice hasta el final. items.length - 3obtiene el índice de 3 caracteres desde el final


0

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.