在c#中向字符串中插入字符

本文关键字:插入 字符 字符串 | 更新日期: 2023-09-27 18:15:18

给定c#中的以下字符串,我如何在字符串中的每个字符之间插入一个字符?

例如

:"Hello Sunshine"将成为"H.e.l.l.o. .S.u.n.s.h.i.n.e"

在c#中最有效、最快的方法是什么?

在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);

在。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 + "."))