繁体   English   中英

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

[英]How to replace last character of the string using c#?

string str = "Student_123_";

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

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

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

不。

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

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

C# .NET 让它几乎太容易了。

str = str.TrimEnd('_')

这是使用string的限制。 如果你需要做很多这样的改变,你可以使用StringBuilder 但是对于您需要的简单任务,这不值得。

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

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

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

使用 StringBuilder class

StringBuilder mbuilder = new StringBuilder("Student_123_");
mbuilder[mbuilder.Length-1] = ',';
Console.WriteLine(mbuilder.ToString());

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

好吧,您将无法使用,因为str.Remove(...)不操作str ,它返回一个新字符串,并在其上完成了删除操作。

所以 - 你需要:

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

在效率方面,您可以做出其他几种选择(子字符串、修剪...),但最终您将获得相同的时间/空间复杂度。

编辑:

另外,不要试图将所有内容压缩到一行中,追随你的程序员会欣赏更高的可读性。 (尽管在这种情况下,一行也很容易阅读。)一行。= 更有效。

使用一行代码,您可以编写:

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

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

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

我认为这与您将获得的一样有效。 从技术上讲,您在这里创建了两个新字符串,而不是一个(Remove 的结果和 Concatenation 的结果)。 但是,我能想到的不创建两个字符串的一切,最终都会创建超过 1 个其他 object 来这样做。 您可以使用 StringBuilder,但这比额外的字符串或char[]更重,但它仍然是额外的 object,并不比我上面列出的要好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM