string str = "Student_123_";
我需要用“,”替换最后一个字符“_”。我是这样做的。
str.Remove(str.Length -1, 1);
str = str + ",";
然而,是否有可能更有效地实现它。可能是一行代码。?? 顺便说一下,最后一个字符可以是任何字符。所以,替换不会在这里工作。
答案 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[]
,但它仍然是一个额外的对象,并不比我上面列出的更好。