在C#中将字符插入字符串

时间:2011-11-18 18:09:53

标签: c# string

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

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

在C#中执行此操作的最有效,最快捷的方法是什么?

5 个答案:

答案 0 :(得分:5)

如果你想在每个角色后使用一个点,请使用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解决方案并对其进行处理。最后一个索引作为特例。

注意:通常您不需要最有效的解决方案,只需要一个足够快的解决方案。如果一个稍慢但更简单的解决方案足以满足您的需求,请使用它而不是不必要地优化性能。

答案 1 :(得分:5)

怎么样:

string result = string.Join(".", someString.AsEnumerable());

这隐藏了大部分复杂性,并将在内部使用StringBuilder

答案 2 :(得分:1)

你关心大字符串的表现吗?

var result = string.Join(".", str.Select(c => c.ToString());

答案 3 :(得分:1)

这是我的命题,我知道它看起来并不超级性感,但我相信它更快(样本字符串快3倍)并且需要的内存数量比使用Select,Join和所有爵士乐的所有内存要多: - )

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

另外,它不需要Framework 4。

答案 4 :(得分:0)

马克的回答可能更具可读性。但我总是喜欢这种解决方案:

string.Join("", "Hello Sunshine".Select(x => x + "."))