Entfernen Sie die letzten drei Zeichen aus einer Zeichenfolge

122

Ich möchte die letzten drei Zeichen aus einer Zeichenfolge entfernen:

string myString = "abcdxxx"; 

Beachten Sie, dass es sich bei der Zeichenfolge um dynamische Daten handelt.

user1765862
quelle
1
Lesen Sie die letzten 3 Zeichen = eine Sache, entfernen Sie die letzten 3 Zeichen = eine andere. Welche?
Kieren Johnstone

Antworten:

234

Lesen Sie die letzten 3 Zeichen aus der Zeichenfolge [Anfangs gestellte Frage]

Sie können string.Substring verwenden und ihm den Startindex geben, und der Teilstring wird vom angegebenen Index bis zum Ende gestartet .

myString.Substring(myString.Length-3)

Ruft einen Teilstring von dieser Instanz ab. Die Teilzeichenfolge beginnt an einer bestimmten Zeichenposition. MSDN

Bearbeiten , für aktualisierten Beitrag

Entfernen Sie die letzten 3 Zeichen aus der Zeichenfolge [Aktualisierte Frage]

Um die letzten drei Zeichen aus dem String entfernen können Sie verwenden String.substring (Int32, Int32) und geben sie den Startindex 0und Ende Index drei weniger als die Stringlänge . Der Teilstring wird vor den letzten drei Zeichen angezeigt.

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

String.Substring-Methode (Int32, Int32)

Ruft einen Teilstring von dieser Instanz ab. Der Teilstring beginnt an einer bestimmten Zeichenposition und hat eine bestimmte Länge.

Sie können auch die String.Remove (Int32) -Methode verwenden, um die letzten drei Zeichen zu entfernen, indem Sie den Startindex als Länge - 3 übergeben . Dieser wird von diesem Punkt bis zum Ende des Strings entfernt.

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

String.Remove-Methode (Int32)

Gibt eine neue Zeichenfolge zurück, in der alle Zeichen in der aktuellen Instanz gelöscht wurden, beginnend an einer bestimmten Position und bis zur letzten Position

Adil
quelle
13
Dies ist also nicht die Antwort
bremst
21
Dank @braks lautete die ursprünglich gestellte Frage "Die letzten 3 Zeichen aus der Zeichenfolge lesen". Diese wird später bearbeitet und ich wusste nicht, siehe den Bearbeitungsverlauf der Frage. Ihr Kommentar hat mir geholfen, meine Antwort zu korrigieren, die nach der Bearbeitung der Frage falsch wurde.
Adil
26
myString = myString.Remove(myString.Length - 3, 3);
Alex
quelle
13

Ich habe all das durchgelesen, wollte aber etwas eleganteres. Nur um eine bestimmte Anzahl von Zeichen am Ende einer Zeichenfolge zu entfernen:

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

Ausgabe:

"he"
Byron Katz
quelle
7
Dieser ist ziemlich "kreativ", da er nicht die Länge des Strings benötigt, aber die umgekehrte Operation ist wahrscheinlich teurer.
Aleksandar
4
Das Umkehren einer Zeichenfolge ist definitiv teurer als das Zählen ihrer Zeichen. Es muss eine ganz neue Zeichenfolge erstellt, dann das Original darauf kopiert und dann die ursprüngliche Zeichenfolge mit Müll gesammelt werden.
Matt Gregory
@ MattGregory-Zeichenfolgen sind unveränderlich: Entfernen, Teilzeichenfolge, jede Zeichenfolgenfunktion generiert eine neue Zeichenfolge. Das Überschreiben des ursprünglichen Zeigers führt immer zur Speicherbereinigung. Dies ist jedoch immer noch langsamer, da Enumerable.Reversedie Zeichenfolge in a char[]gepuffert wird, dann in eine neue char[], die 3 kürzer ist, gepuffert wird und dann eine neue generiert wird string(mit intern einer anderen char[]). Ein besserer Ansatz wäre new string("hello".Reverse().Skip(3)), oder einfach eine eigene String-Erweiterungsfunktion zu schreiben AllBut(this string in, int i), die Teilzeichenfolge verwendet.
Wolfzoon
@MattGregory Es werden nicht einmal die Zeichen einer Zeichenfolge "gezählt", sondern eine Zeichenfolge Lengthgespeichert.
Wolfzoon
1
Jetzt haben wir auch .SkipLast(n). Keine Notwendigkeit, etwas umzukehren. "hello".SkipLast(3)gibt"he"
AjitZero
9
myString.Remove(myString.Length-3);
Adeel
quelle
3
myString = myString.Remove(myString.Length - 3)das ist.
A-Sharabiani
6
string test = "abcdxxx";
test = test.Remove(test.Length - 3);
//output : abcd
Jaidi Wael Leila
quelle
5

Sie können verwenden String.Remove, um von einer angegebenen Position bis zum Ende der Zeichenfolge zu löschen.

myString = myString.Remove(myString.Length - 3);
lc.
quelle
4

Wahrscheinlich nicht genau das, wonach Sie suchen, da Sie sagen, dass es sich um "dynamische Daten" handelt, aber angesichts Ihrer Beispielzeichenfolge funktioniert dies auch:

? "abcdxxx".TrimEnd('x');
"abc"
Mike Lowery
quelle
3

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

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

Entfernen Sie die letzten Zeichen aus einer Zeichenfolge

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

.Text.Remove(10)// wird verwendet, um Text vom Index 10 bis zum Ende zu entfernen

subramanya46
quelle
1

Der neue C # 8.0-Bereichsoperator kann eine gute Abkürzung sein, um dies zu erreichen.

Beispiel:

var shortenedString = myString[0..^1]
vullnetyy
quelle
0
items.Remove(items.Length - 3)

string.Remove()Entfernt alle Elemente aus diesem Index bis zum Ende. items.length - 3erhält den Index 3 Zeichen vom Ende

Ben Rauzi
quelle
0

Einfach. text = text.remove(text.length - 3). Ich habe 3 subtrahiert, weil die RemoveFunktion alle Elemente aus diesem Index bis zum Ende der Zeichenfolge entfernt text.length. Wenn ich also 3 subtrahiere, wird die Zeichenfolge mit 3 Zeichen entfernt.

Sie können dies so verallgemeinern, dass aZeichen am Ende der Zeichenfolge entfernt werden:

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

Was ich also tat, war dieselbe Logik. Die removeFunktion entfernt alle Elemente von ihrem Inneren bis zum Ende der Zeichenfolge, die der Länge des Texts entspricht. Wenn ich also avon der Länge der Zeichenfolge subtrahiere , erhält ich die Zeichenfolge mit aentfernten Zeichen.

Es funktioniert also nicht nur für 3, sondern für alle positiven Ganzzahlen, außer wenn die Länge der Zeichenfolge kleiner oder gleich aist. In diesem Fall wird eine negative Zahl oder 0 zurückgegeben.

Zixuan
quelle