Rimuovi gli ultimi tre caratteri da una stringa


122

Voglio rimuovere gli ultimi tre caratteri da una stringa:

string myString = "abcdxxx"; 

Notare che la stringa è dati dinamici.


1
Leggi gli ultimi 3 caratteri = una cosa, rimuovi gli ultimi 3 caratteri = un'altra. Quale?
Kieren Johnstone

Risposte:


234

leggi gli ultimi 3 caratteri dalla stringa [Domanda iniziale]

Puoi usare string.Substring e dargli l'indice iniziale e otterrà la sottostringa a partire dall'indice dato fino alla fine.

myString.Substring(myString.Length-3)

Recupera una sottostringa da questa istanza. La sottostringa inizia in una posizione del carattere specificata. MSDN

Modifica , per post aggiornato

Rimuovi gli ultimi 3 caratteri dalla stringa [Domanda aggiornata]

Per rimuovere gli ultimi tre caratteri dalla stringa è possibile utilizzare string.Substring (Int32, Int32) e assegnargli l'indice iniziale 0e l'indice finale tre in meno rispetto alla lunghezza della stringa . Otterrà la sottostringa prima degli ultimi tre caratteri.

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

Metodo String.Substring (Int32, Int32)

Recupera una sottostringa da questa istanza. La sottostringa inizia in una posizione del carattere specificata e ha una lunghezza specificata.

Puoi anche usare il metodo String.Remove (Int32) per rimuovere gli ultimi tre caratteri passando l'indice iniziale come lunghezza - 3 , rimuoverà da questo punto alla fine della stringa.

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

Metodo String.Remove (Int32)

Restituisce una nuova stringa in cui tutti i caratteri nell'istanza corrente, che iniziano in una posizione specificata e continuano fino all'ultima posizione, sono stati eliminati


13
non è così la risposta
frena il

21
Grazie @braks, la domanda inizialmente posta era "leggi gli ultimi 3 caratteri dalla stringa" Questo viene successivamente modificato e non lo sapevo, vedi la cronologia delle modifiche della domanda. Il tuo commento mi ha aiutato a correggere la mia risposta che è diventata sbagliata dopo la modifica della domanda.
Adil

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

13

Ho letto tutto questo, ma volevo qualcosa di un po 'più elegante. Solo per rimuovere un certo numero di caratteri dalla fine di una stringa:

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

produzione:

"he"

7
Questo è abbastanza "creativo", poiché non ha bisogno della lunghezza della stringa, ma l'operazione inversa è probabilmente più costosa.
Aleksandar

4
Invertire una stringa è decisamente più costoso che contare i suoi caratteri. È necessario costruire una stringa completamente nuova, quindi copiare l'originale, quindi raccogliere la stringa originale.
Matt Gregory

Le stringhe @MattGregory non sono modificabili: Rimuovi, Sottostringa, qualsiasi funzione stringa genera una nuova stringa. La sovrascrittura del puntatore originale causa sempre la garbage collection. Tuttavia, è ancora più lento, poiché Enumerable.Reversememorizza nel buffer la stringa in a char[], quindi in una nuova char[]che è 3 più corta e quindi ne genera una nuova string(con un'altra internamente char[]). Un approccio migliore sarebbe new string("hello".Reverse().Skip(3)), o semplicemente scrivere la tua funzione di estensione di stringa AllBut(this string in, int i)che utilizza Substring.
Wolfzoon

@ MattGregory Non è nemmeno "contare" i caratteri di una stringa, una stringa ha la sua Lengthmemorizzata.
Wolfzoon

1
Ora abbiamo anche .SkipLast(n). Non c'è bisogno di invertire nulla. "hello".SkipLast(3)"he"
AjitZero

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

3
myString = myString.Remove(myString.Length - 3)questo è.
A-Sharabiani


5

È possibile utilizzare String.Removeper eliminare da una posizione specificata alla fine della stringa.

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

4

Probabilmente non è esattamente quello che stai cercando dato che dici che sono "dati dinamici" ma, data la tua stringa di esempio, funziona anche:

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



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

1

Rimuove gli ultimi caratteri da una stringa

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

.Text.Remove(10)// utilizzato per rimuovere il testo a partire dall'indice 10 fino alla fine


1

Il nuovo operatore di intervallo C # 8.0 può essere un'ottima scorciatoia per raggiungere questo obiettivo.

Esempio:

var shortenedString = myString[0..^1]

0
items.Remove(items.Length - 3)

string.Remove()rimuove tutti gli elementi da quell'indice fino alla fine. items.length - 3ottiene l'indice 3 caratteri dalla fine


0

Facile. text = text.remove(text.length - 3). Ho sottratto 3 perché la Removefunzione rimuove tutti gli elementi da quell'indice alla fine della stringa che è text.length. Quindi se sottraggo 3, ottengo la stringa con 3 caratteri rimossi da essa.

Puoi generalizzare questo per rimuovere i acaratteri dalla fine della stringa, in questo modo:

text = text.remove(text.length - a) 

Quindi quello che ho fatto è stata la stessa logica. La removefunzione rimuove tutti gli elementi dal suo interno fino alla fine della stringa che è la lunghezza del testo. Quindi se sottraggo adalla lunghezza della stringa che mi darà la stringa con i acaratteri rimossi.

Quindi non funziona solo per 3, funziona per tutti i numeri interi positivi, tranne se la lunghezza della stringa è minore o uguale a a, in tal caso restituirà un numero negativo o 0.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.