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

本文关键字:最后一个 字符 字符串 替换 何使用 | 更新日期: 2023-09-27 17:54:40

string str = "Student_123_";

我需要将最后一个字符"_"替换为","。我是这样做的。

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

然而,是否有可能更有效地实现它。可能是一行代码。顺便说一句,最后一个字符可以是任何字符。

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

No.

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

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

c# . net让它变得太简单了。

str = str.TrimEnd('_')

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

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

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

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

使用StringBuilder类

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 + ",";

在效率方面,您可以做出其他几种选择(substring, trim…),但最终您将获得相同的时间/空间复杂性。

编辑:

同样,不要试图将所有内容压缩到一行中,在您之后的程序员会欣赏更强的可读性。(尽管在这种情况下,一行字同样容易阅读。)一行!=更有效率

用一行代码你可以这样写:

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

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

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

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

//You mean like this? :D
string str = "Student_123_";
str = $"{str.Remove(str.Length -1)},";
// As string is array of chars you can use efficient "range" operator introduced in c# 8.0
string str = "Student_123_";
str = str[0..^1] + ",";