Usuń ostatni określony znak w ciągu C #


88

Używam WinForms c #, mam wartość ciągu jak poniżej,

string Something = "1,5,12,34,";

Muszę usunąć ostatni przecinek w ciągu. Więc jak mogę to usunąć?


16
Dlaczego masz taki string? Zakładam z powodu pętli, która łączy przecinki z ints. Możesz użyć string.Join(",", ints)zamiast tego. To przede wszystkim pozwala uniknąć końcowych przecinków.
Tim Schmelter

Odpowiedzi:


262

Spróbuj string.TrimEnd():

Something = Something.TrimEnd(',');

5
Jest to najlepsze rozwiązanie, ponieważ działa dla wszystkich ciągów znaków, w tym sytuacji, w których nie wiadomo z wyprzedzeniem, JEŻELI ciąg faktycznie kończy się przecinkiem, czy nie.
East of Nowhere

6
Dlatego wciąż szukam rozwiązań, nawet tych, które sam mógłbym łatwo napisać. Ktoś inny zwykle go rozwiązał. :)
dpberry178

1
Więc pojedyncze cytaty nie były błędem. Dziś dowiedziałem się, że znak i ciąg znaków są definiowane odpowiednio za pomocą pojedynczych i podwójnych cudzysłowów.
egmfrs

20

Odpowiedź King Kinga jest oczywiście poprawna. Również komentarz Tima Schmeltera jest również dobrą sugestią w twoim przypadku.

Ale jeśli naprawdę chcesz usunąć ostatni przecinek w ciągu , powinieneś znaleźć indeks ostatniego przecinka i usunąć polubienie;

string s = "1,5,12,34,12345";
int index = s.LastIndexOf(',');
Console.WriteLine(s.Remove(index, 1));

Wyjście będzie;

1,5,12,3412345

Tutaj demonstration .

Jest to zbyt mało prawdopodobne, abyś chciał w ten sposób, ale chcę to wskazać. I pamiętaj, String.Removemetoda nie usuwa żadnego znaku z oryginalnego ciągu, zwraca nowy ciąg.


5

Próbować string.Remove();

string str = "1,5,12,34,";
string removecomma = str.Remove(str.Length-1);
MessageBox.Show(removecomma);

3

Metoda TrimEnd przyjmuje wejściową tablicę znaków, a nie ciąg. Poniższy kod z Dot Net Perls przedstawia bardziej wydajny przykład wykonywania tej samej funkcji co TrimEnd.

static string TrimTrailingChars(string value)
{
    int removeLength = 0;
    for (int i = value.Length - 1; i >= 0; i--)
    {
        char let = value[i];
        if (let == '?' || let == '!' || let == '.')
        {
            removeLength++;
        }
        else
        {
            break;
        }
    }
    if (removeLength > 0)
    {
        return value.Substring(0, value.Length - removeLength);
    }
    return value;
}

1

Lub możesz najpierw przekonwertować go na Char Array przez:

string Something = "1,5,12,34,";
char[] SomeGoodThing=Something.ToCharArray[];

Teraz masz każdą postać indexed:

SomeGoodThing[0] -> '1'
SomeGoodThing[1] -> ','

Pobaw się


1

Spróbuj poniżej

Coś..TrimEnd (",". ToCharArray ());


0
Dim psValue As String = "1,5,12,34,123,12"
psValue = psValue.Substring(0, psValue.LastIndexOf(","))

wynik:

1,5,12,34,123

Pytanie dotyczyło C #, a nie VB.
metabuddy

0

Kiedy masz spacje na końcu. możesz użyć beliow.

ProcessStr = ProcessStr.Replace(" ", "");
Emails     = ProcessStr.TrimEnd(';');
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.