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.

usuario1765862
fuente
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.

Adil
fuente
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);
Alex
fuente
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"
Byron Katz
fuente
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
9
myString.Remove(myString.Length-3);
Adeel
fuente
3
myString = myString.Remove(myString.Length - 3)es decir.
A-Sharabiani
6
string test = "abcdxxx";
test = test.Remove(test.Length - 3);
//output : abcd
Jaidi Wael Leila
fuente
5

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

myString = myString.Remove(myString.Length - 3);
lc.
fuente
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"
Mike Lowery
fuente
3

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

scofield
fuente
2
   string myString = "abcdxxx";
   if (myString.Length<3)
      return;
   string newString=myString.Remove(myString.Length - 3, 3);
Frank59
fuente
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

subramanya46
fuente
1

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

Ejemplo:

var shortenedString = myString[0..^1]
vullnetyy
fuente
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

Ben Rauzi
fuente
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.

zixuan
fuente