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ąć?

user3042186
źródło
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(',');
King King
źródło
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.

Soner Gönül
źródło
5

Próbować string.Remove();

string str = "1,5,12,34,";
string removecomma = str.Remove(str.Length-1);
MessageBox.Show(removecomma);
shA.t
źródło
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;
}
bayu
źródło
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ę

Faisal Ashfaq
źródło
1

Spróbuj poniżej

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

pmh
źródło
0
Dim psValue As String = "1,5,12,34,123,12"
psValue = psValue.Substring(0, psValue.LastIndexOf(","))

wynik:

1,5,12,34,123
nambi_r88
źródło
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(';');
Lahiru Gamage
źródło