在c#中向字符串中插入字符
本文关键字:插入 字符 字符串 | 更新日期: 2023-09-27 18:15:18
给定c#中的以下字符串,我如何在字符串中的每个字符之间插入一个字符?
例如:"Hello Sunshine"
将成为"H.e.l.l.o. .S.u.n.s.h.i.n.e"
如何:
string result = string.Join(".", someString.AsEnumerable());
这隐藏了大部分的复杂性,并将在内部使用StringBuilder
。
如果您希望每个字符后面都有一个点,请使用StringBuilder
:
StringBuilder sb = new StringBuilder(s.Length * 2);
foreach (char c in s) {
sb.Append(c);
sb.Append('.');
}
string result = sb.ToString();
如果你不想在。net 4.0中使用尾随点,你可以使用string.Join
。
string result = string.Join(".", (IEnumerable<char>)s);
在。net 3.5及更早版本中,第二个参数应该是一个数组,这意味着你将不得不临时创建一个数组,因此使用上面所示的StringBuilder
解决方案并将第一个或最后一个索引作为特殊情况处理可能会更快。
注意:通常你需要的不是最有效的解决方案,而是一个足够快的解决方案。如果一个稍微慢一些但简单得多的解决方案足以满足您的需求,那么就使用它来代替不必要的性能优化。
您关心大字符串的性能吗?
var result = string.Join(".", str.Select(c => c.ToString());
这是我的建议,我知道它看起来不是超级性感,但我相信它更快(3倍快的样本字符串),并需要确切的内存量比所有那些使用Select, Join,和所有的jazz:-)
static string ConvertString(string s)
{
char[] newS = new char[s.Length * 2 + 1];
int i = 0;
do
{
newS[i] = s[i / 2];
if (i == (s.Length * 2 - 2))
break;
i++;
newS[i] = '.';
i++;
}
while (true);
return new string(newS);
}
4.
马克的回答可能更容易读懂。但我总是喜欢这样的解决方案:
string.Join("", "Hello Sunshine".Select(x => x + "."))