[英]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.