在C#中,如何在字符串中的每个字符之间插入一个字符?
例如:"Hello Sunshine"
将变为"H.e.l.l.o. .S.u.n.s.h.i.n.e"
在C#中,最高效、最快的方法是什么?
怎么样:
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);
StringBuilder
解决方案,并将第一个或最后一个索引视为特殊情况,可能会更快。StringBuilder sb = new StringBuilder(s.Length * 2);
来提高效率。 - Quintin Robinsonvar result = string.Join(".", str.Select(c => c.ToString());
.
。 - Kirk Woll这是我的建议,我知道它看起来并不太性感,但我相信它比使用Select、Join等所有方法更快(对于示例字符串快3倍),并且需要精确的内存量 :-)
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 + "."))
string.Concat
。我们平手了 :) - Snowbear
.
。 - svick