113

I use WinForms c#.I have string value like below,

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

I need to remove last comma in a string. So How can i delete it ?

Demodave
  • 6,242
  • 6
  • 43
  • 58
user3042186
  • 1,197
  • 3
  • 8
  • 8
  • 17
    Why do you have such a `string`? I assume because of a loop that concatenates commas to `int`s. You can use `string.Join(",", ints)` instead. That avoids trailing commas in the first place. – Tim Schmelter Nov 27 '13 at 15:32

9 Answers9

327

Try string.TrimEnd():

Something = Something.TrimEnd(',');
King King
  • 61,710
  • 16
  • 105
  • 130
  • 7
    This is the best solution because it works for all strings, including situations where you don't know ahead of time IF the string does in fact end in a comma, or not. – East of Nowhere Sep 27 '17 at 21:38
  • 7
    This is why I still search for solutions even for things I could easily write myself. Someone else has usually solved it. :) – dpberry178 Mar 21 '19 at 20:23
  • 2
    So the single quotes weren't a mistake. Today I learnt char and string are defined with single and double quotations respectively. – egmfrs Dec 12 '19 at 17:19
  • This is not the best solution. I created a line with multiple commas. Something.TrimEnd(','); removed all the commas instead of just the last one as the original question required. In the help tooltip it even states that it will remove all trailing characters matching the character(s) specified. However, it works well if your string always ends with one comma. – Fritz W Apr 20 '22 at 06:35
22

King King's answer is of course correct, and Tim Schmelter's comment is also good suggestion in your case.

But if you really want to remove the last comma in a string, you should find the index of the last comma and remove it like this:

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

Output will be:

1,5,12,3412345

Here is a demonstration.

It is unlikely that you want this way but I want to point it out. And remember, the String.Remove method doesn't remove any characters in the original string, it returns new string.

stellr42
  • 3,365
  • 2
  • 21
  • 33
Soner Gönül
  • 97,193
  • 102
  • 206
  • 364
6

Try string.Remove();

string str = "1,5,12,34,";
string removecomma = str.Remove(str.Length-1);
MessageBox.Show(removecomma);
shA.t
  • 16,580
  • 5
  • 54
  • 111
3

The TrimEnd method takes an input character array and not a string. The code below from Dot Net Perls, shows a more efficient example of how to perform the same functionality as 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;
}
Brett Wertz
  • 412
  • 4
  • 19
bayu
  • 401
  • 3
  • 4
3
Dim psValue As String = "1,5,12,34,123,12"
psValue = psValue.Substring(0, psValue.LastIndexOf(","))

output:

1,5,12,34,123
Syscall
  • 19,327
  • 10
  • 37
  • 52
nambi_r88
  • 41
  • 1
2

Try below

Something..TrimEnd(",".ToCharArray());

pmh
  • 192
  • 10
1

Or you can convert it into Char Array first by:

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

Now you have each character indexed:

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

Play around it

Faisal Ashfaq
  • 2,545
  • 4
  • 28
  • 41
1

When you have spaces at the end. you can use beliow.

ProcessStr = ProcessStr.Replace(" ", "");
Emails     = ProcessStr.TrimEnd(';');
Lahiru Gamage
  • 849
  • 5
  • 14
  • 27
1

Try this, string Something1= Something.Substring(0, Something.Length - 1 );

gudlyf
  • 11
  • 1