Usuń ostatnie trzy znaki z ciągu


122

Chcę usunąć ostatnie trzy znaki z ciągu:

string myString = "abcdxxx"; 

Zwróć uwagę, że ciąg to dane dynamiczne.


1
Przeczytaj ostatnie 3 znaki = jedna rzecz, usuń ostatnie 3 znaki = inna. Który?
Kieren Johnstone,

Odpowiedzi:


234

przeczytaj ostatnie 3 znaki z ciągu [początkowo zadane pytanie]

Możesz użyć string.Substring i nadać mu indeks początkowy, a otrzyma podłańcuch zaczynający się od podanego indeksu do końca.

myString.Substring(myString.Length-3)

Pobiera podciąg z tego wystąpienia. Podciąg zaczyna się od określonej pozycji znaku. MSDN

Edytuj , aby zaktualizować post

Usuń ostatnie 3 znaki z ciągu [zaktualizowane pytanie]

Aby usunąć ostatnie trzy znaki z ciągu, możesz użyć string.Substring (Int32, Int32) i nadać mu indeks początkowy 0i końcowy o trzy mniejszy niż długość ciągu . Otrzyma podciąg przed trzema ostatnimi znakami.

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

Metoda String.Substring (Int32, Int32)

Pobiera podciąg z tego wystąpienia. Podciąg zaczyna się w określonej pozycji znaku i ma określoną długość.

Możesz również użyć metody String.Remove (Int32) , aby usunąć ostatnie trzy znaki, przekazując indeks początkowy jako długość - 3 , spowoduje to usunięcie od tego punktu do końca ciągu.

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

Metoda String.Remove (Int32)

Zwraca nowy ciąg, w którym wszystkie znaki w bieżącej instancji, rozpoczynające się na określonej pozycji i kontynuujące do ostatniej pozycji, zostały usunięte


13
to nie jest odpowiedź
braks

21
Dzięki @braks, początkowo zadane pytanie brzmiało „przeczytaj ostatnie 3 znaki z ciągu”. Zostało to później zredagowane i nie wiedziałem, zobacz historię edycji pytania. Twój komentarz pomógł mi poprawić moją odpowiedź, która stała się błędna po edycji pytania.
Adil

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

13

Przeczytałem to wszystko, ale chciałem czegoś bardziej eleganckiego. Wystarczy usunąć określoną liczbę znaków z końca ciągu:

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

wynik:

"he"

7
Ten jest dość „kreatywny”, ponieważ nie wymaga długości łańcucha, ale operacja odwrotna jest prawdopodobnie droższa.
Aleksandar

4
Odwracanie łańcucha jest zdecydowanie droższe niż liczenie jego znaków. Należy skonstruować cały nowy ciąg, a następnie skopiować do niego oryginał, a następnie oryginalny ciąg musi zostać usunięty.
Matt Gregory,

Ciągi @MattGregory są niezmienne: Remove, Substring, każda funkcja ciągu generuje nowy ciąg. Nadpisanie oryginalnego wskaźnika zawsze powoduje wyrzucanie elementów bezużytecznych. Jest to jednak nadal wolniejsze, ponieważ Enumerable.Reversebuforuje ciąg w a char[], a następnie buforuje w nowy, char[]który jest o 3 krótszy, a następnie generuje nowy string(z wewnętrznie innym char[]). Lepszym podejściem byłoby new string("hello".Reverse().Skip(3))napisanie własnej funkcji rozszerzającej ciąg, AllBut(this string in, int i)która używa Substring.
Wolfzoon,

@MattGregory To nawet nie „liczy” znaków w łańcuchu, łańcuch jest Lengthprzechowywany.
Wolfzoon,

1
Teraz też mamy .SkipLast(n). Nie ma potrzeby niczego odwracać. "hello".SkipLast(3)daje"he"
AjitZero



5

Możesz użyć String.Removedo usunięcia od określonej pozycji do końca ciągu.

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

4

Prawdopodobnie nie jest to dokładnie to, czego szukasz, ponieważ mówisz, że to „dane dynamiczne”, ale biorąc pod uwagę przykładowy ciąg, to również działa:

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



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

1

Usuń ostatnie znaki z ciągu

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

.Text.Remove(10)// służy do usuwania tekstu zaczynającego się od indeksu 10 do końca


1

Nowy operator zakresu C # 8.0 może być świetnym skrótem, aby to osiągnąć.

Przykład:

var shortenedString = myString[0..^1]

0
items.Remove(items.Length - 3)

string.Remove()usuwa wszystkie elementy z tego indeksu do końca. items.length - 3pobiera indeks 3 znaki od końca


0

Łatwo. text = text.remove(text.length - 3). Odjąłem 3, ponieważ Removefunkcja usuwa wszystkie elementy z tego indeksu do końca ciągu, który jest text.length. Więc jeśli odejmę 3, otrzymam ciąg z usuniętymi z niego 3 znakami.

Możesz uogólnić to na usuwanie aznaków z końca ciągu, na przykład:

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

Więc to, co zrobiłem, było tą samą logiką. removeFunkcja usuwa wszystkie elementy z jego wnętrza na końcu łańcucha, który jest długością tekstu. Więc jeśli odeję aod długości ciągu, który da mi ciąg z ausuniętymi znakami.

Więc to nie działa tylko dla 3, działa dla wszystkich dodatnich liczb całkowitych, z wyjątkiem przypadku, gdy długość łańcucha jest mniejsza lub równa a, w takim przypadku zwróci liczbę ujemną lub 0.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.