在C#中删除字符串中的最后一个特定字符

113

我使用WinForms c#。我有以下字符串值:

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

我需要删除字符串中的最后一个逗号。那么,我该如何删除它?


17
你为什么会有这样的string呢?我猜是因为有一个循环将逗号连接到int上。你可以使用string.Join(",", ints)来代替。这样可以避免最初出现尾随逗号。 - Tim Schmelter
9个回答

329

尝试使用string.TrimEnd()函数:

Something = Something.TrimEnd(',');

7
这是最佳解决方案,因为它适用于所有字符串,包括在您事先不知道字符串是否以逗号结尾的情况下。 - East of Nowhere
7
这就是为什么我即使能够轻松自己写出来的事情,仍然会去寻找解决方案。通常有其他人已经解决了它。 :) - dpberry178
2
所以单引号并不是一个错误。今天我学到了char和string分别用单引号和双引号定义。 - egmfrs
这不是最好的解决方案。我创建了一行带有多个逗号。Something.TrimEnd(',');删除了所有逗号,而不仅仅是原始问题所需的最后一个逗号。在帮助工具提示中,甚至说明它将删除所有匹配指定字符的尾随字符。但是,如果您的字符串总是以一个逗号结尾,则可以正常工作。 - Fritz W

22

King King's answer当然是正确的,而Tim Schmelter的评论也是在您的情况下很好的建议。

但是如果您真的想要删除字符串中的最后一个逗号,您应该找到最后一个逗号的索引并像这样删除它:

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

输出将是:

1,5,12,3412345

这里是一个演示

虽然你可能不想使用这种方式,但我想指出它。请记住,String.Remove 方法不会删除原始字符串中的任何字符,它会返回新的字符串。


6
尝试使用 string.Remove();
string str = "1,5,12,34,";
string removecomma = str.Remove(str.Length-1);
MessageBox.Show(removecomma);

3

TrimEnd方法接收一个字符数组,而不是字符串。

以下代码来自于Dot Net Perls,展示了如何更高效地执行与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;
}

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

输出:

1,5,12,34,123

问题是关于 C# 而不是 VB。 - HamsterWithPitchfork
2
答案是用VB写的,但对C#也适用,所以它对我很有帮助。 - user3884423

2

请尝试以下代码:

某些内容..TrimEnd(",".ToCharArray());


你可以使用','代替",".ToCharArray() - Mason

1

或者您可以首先将它转换为 char 数组:

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

现在每个字符都有索引:indexed
SomeGoodThing[0] -> '1'
SomeGoodThing[1] -> ','

玩转它


1
尝试这个: 字符串 Something1 = Something.Substring(0, Something.Length - 1);

如果“Something”是一个空字符串,这样做不会出错吗? - KeyOfJ

1
当您在末尾有空格时,您可以使用下面的方法。
ProcessStr = ProcessStr.Replace(" ", "");
Emails     = ProcessStr.TrimEnd(';');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接