如何使用c#替换字符串的最后一个字符
本文关键字:最后一个 字符 字符串 替换 何使用 | 更新日期: 2023-09-27 17:54:40
string str = "Student_123_";
我需要将最后一个字符"_"替换为","。我是这样做的。
str.Remove(str.Length -1, 1);
str = str + ",";
然而,是否有可能更有效地实现它。可能是一行代码。顺便说一句,最后一个字符可以是任何字符。
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] + ",";