如何使用c#替换字符串的最后一个字符?

如何使用c#替换字符串的最后一个字符?,c#,C#,我需要用“,”替换最后一个字符“u”。我是这样做的 string str = "Student_123_"; 然而,是否有可能更有效地实现这一目标。可能是一行代码。?? 顺便说一句,最后一个字符可以是任何字符。所以替换在这里不起作用。不 在C#中,字符串是不可变的,因此不能“就地”更改字符串。必须先删除字符串的一部分,然后创建新字符串。事实上,这也意味着您的原始代码是错误的,因为str.Remove(str.Length-1,1)根本不改变str,它返回一个新字符串!这应该做到: str.Re

我需要用“,”替换最后一个字符“u”。我是这样做的

string str = "Student_123_";
然而,是否有可能更有效地实现这一目标。可能是一行代码。?? 顺便说一句,最后一个字符可以是任何字符。所以替换在这里不起作用。

在C#中,字符串是不可变的,因此不能“就地”更改字符串。必须先删除字符串的一部分,然后创建新字符串。事实上,这也意味着您的原始代码是错误的,因为
str.Remove(str.Length-1,1)根本不改变str,它返回一个新字符串!这应该做到:

str.Remove(str.Length -1, 1);
str = str + ",";

使用StringBuilder类


好吧,您所拥有的将不起作用,因为
str.Remove(…)
不会操作
str
,它会返回一个新字符串,并在其上完成删除操作

因此,您需要:

StringBuilder mbuilder = new StringBuilder("Student_123_");
mbuilder[mbuilder.Length-1] = ',';
Console.WriteLine(mbuilder.ToString());
就效率而言,您还可以做出其他几种选择(子字符串、修剪…),但最终您将获得相同的时间/空间复杂性

编辑:


另外,不要试图将所有内容压缩成一行,后面的程序员会欣赏更大的可读性。(虽然在这种情况下,一行文字同样容易阅读。)一行文字!=效率更高。

只需一行代码,您就可以编写:

str = str.Remove(str.Length-1,1);
str = str + ",";

str.Remove
不修改
str
,它返回一个新字符串。您的第一行应该是
str=str.Remove…

一行?确定:
str=str.Remove(str.Length-1)+“,”


我认为这是你能得到的最有效的方法。从技术上讲,这里创建的是两个新字符串,而不是一个(删除的结果和连接的结果)。但是,我所能想到的不创建两个字符串的所有方法,最终都会创建多个其他对象。您可以使用StringBuilder,但它比额外的字符串或
char[]
更重,但它仍然是一个额外的对象,并不比我上面列出的更好。

这是使用
字符串的限制。如果需要进行大量类似的更改,可以使用
StringBuilder
。但对于你需要的简单任务来说,这并不值得

str = str.Remove(str.Length - 1, 1) + ",";
str=str.Substring(0,str.Length-1)+“,”

C#.NET让它变得太容易了

str = str.Substring(0, str.Length - 1) + ",";

优雅但效率不高。 用逗号替换str结尾的任何字符

str = str.TrimEnd('_')

不要忘记StringBuilder。它包含了一些有用的字符串处理方法,非常有效。请参阅下面我的答案。一行代码并不总是意味着它是高效的。您希望用一种高效的方式来完成它,还是用一种短的方式(如更少的代码行)来完成它?应该注意的是,这只在字符串末尾有一个下划线时才起作用,as
TrimEnd
将删除指定字符的所有匹配项。@Ohad Schneider:不正确-任何数量的指定字符都将从任意一端修剪掉。但我注意到我没有回答OP的问题,因为我没有看到他试图添加的逗号。因此,我将我的答案编辑为:str=str.Trim(“'+”,”
TrimEnd
只会删除尾随字符:我正在漫游,看到了这个答案,不知道为什么要添加计数“1”?为什么不简单地用str.Remove(str.Length-1)来删除最后一个字符呢?@A.T.我对C#的标准库不太熟悉,但看看文档,它似乎应该可以工作。
str = str.TrimEnd('_')
str = Regex.Replace(str, ".$", ",");