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

时间:2011-05-02 00:29:05

标签: c#

string str = "Student_123_";

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

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

然而,是否有可能更有效地实现它。可能是一行代码。?? 顺便说一下,最后一个字符可以是任何字符。所以,替换不会在这里工作。

9 个答案:

答案 0 :(得分:50)

没有

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

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

答案 1 :(得分:15)

C#.NET让它变得非常容易。

str = str.TrimEnd('_')

答案 2 :(得分:7)

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

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

答案 3 :(得分:5)

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

str = Regex.Replace(str, ".$", ",");

答案 4 :(得分:3)

使用StringBuilder类

                    StringBuilder mbuilder = new StringBuilder("Student_123_");

        mbuilder[mbuilder.Length-1] = ',';

        Console.WriteLine(mbuilder.ToString());

答案 5 :(得分:2)

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

答案 6 :(得分:1)

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

所以 - 你需要:

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

在效率方面,你可以做出其他几个选择(子串,修剪......),但最终你会得到相同的时间/空间复杂度。

编辑:

此外,不要试图将所有东西压缩成一行,追随你的程序员会欣赏更高的可读性。 (虽然在这种情况下,单行也很容易阅读。)一行!=效率更高。

答案 7 :(得分:1)

您可以编写一行代码:

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

答案 8 :(得分:1)

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

一行?好的:str = str.Remove(str.Length - 1) + ",";

我认为这样的效率和你想要的一样高效。从技术上讲,您在这里创建两个新字符串,而不是一个(删除的结果,以及连接的结果)。但是,我能想到的不是创建两个字符串的所有内容,最终会创建多个其他对象来执行此操作。你可以使用一个StringBuilder,但这比一个额外的字符串更重,或者可能是char[],但它仍然是一个额外的对象,并不比我上面列出的更好。