C#连接字符串或字符数组

Dan*_*eal 4 c# arrays string concatenation

我在开发应用程序时遇到问题.基本上,我有一个固定的字符串,让我们说"IHaveADream"

我现在想要用户插入另一个字符串,为了我固定长度的目的,然后将固定字符串的每个字符与用户插入的字符串的每个字符连接起来.例如,用户插入"ByeBye",然后输出将是:"IBHyaevBeyAeDream".

怎么做到这一点?

我已经尝试使用String.Concat和String.Join,在for语句中,没有运气.

Dav*_*d L 6

一个内存有效的选项是使用字符串构建器,因为原始字符串和用户输入都可能相当大.正如Kris所提到的,您可以将StringBuilder容量初始化为两个字符串的总长度.

void Main()
{
    var start = "IHaveADream";
    var input = "ByeBye";

    var sb = new StringBuilder(start.Length + input.Length);

    for (int i = 0; i < start.Length; i++)
    {
        sb.Append(start[i]);

        if (input.Length >= i + 1)
            sb.Append(input[i]);
    }

    sb.ToString().Dump();
}
Run Code Online (Sandbox Code Playgroud)

这只能安全地说明输入字符串的长度与起始字符串的长度相等或相等.如果您有一个较长的输入字符串,您需要将较长的长度作为for循环迭代的结束点,并检查每个数组索引是否超出范围.

void Main()
{
    var start = "IHaveADream";
    var input = "ByeByeByeByeBye";

    var sb = new StringBuilder(start.Length + input.Length);

    var length = start.Length >= input.Length ? start.Length : input.Length;
    for (int i = 0; i < length; i++)
    {
        if (start.Length >= i + 1)
            sb.Append(start[i]);

        if (input.Length >= i + 1)
            sb.Append(input[i]);
    }

    sb.ToString().Dump();
}
Run Code Online (Sandbox Code Playgroud)

  • 由于您使用内存效率作为使用StringBuilder的参数,因此请构造StringBuilder,其初始容量等于输出长度. (2认同)