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

本文关键字:字符 数组 字符串 连接 | 更新日期: 2023-09-27 18:00:09

我在开发应用程序时遇到了一个问题。大体上我有一个固定的字符串,比如说"IHaveADream"

我现在想让用户插入另一个字符串,以达到固定长度的目的,然后将固定字符串的每个字符与用户插入的字符串的每个字符串连接起来。例如。用户插入"ByeBye"那么输出将是:"IBHyaevBeyADream"。

如何做到这一点?

我尝试过在for语句中使用String.Concat和String.Join,但没有成功。

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

一个节省内存的选项是使用字符串生成器,因为原始字符串和用户输入都可能相当大。正如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();
}

这只能安全地说明输入字符串的长度比起始字符串短或相等。如果您有一个较长的输入字符串,那么您希望将较长的长度作为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();
}

您可以创建一个字符数组,然后按所需顺序重新组合它们。

char[] chars1 = "IHaveADream".ToCharArray();
char[] chars2 = "ByeBye".ToCharArray();
// you can create a custom algorithm to handle 
// different size strings.
char[] c = new char[17];
c[0] = chars1[0];
c[1] = chars2[0];
...
c[13] = chars1[10];
string s = new string(c);
var firstString = "Ihaveadream";
var secondString = "ByeBye";
var stringBuilder = new StringBuilder();
for (int i = 0; i< firstString.Length; i++) {
           stringBuilder .Append(str[i]);
           if (i < secondString.Length) {
           stringBuilder .Append(secondStr[i]);
           }
}
var result = stringBuilder.ToString();

如果你不太关心内存使用或性能,你可以使用:

    public static string concatStrings(string value, string value2)
    {
        string result = "";
        int i = 0;
        for (i = 0; i < Math.Max(value.Length, value2.Length) ; i++)
        {
            if (i < value.Length) result += value[i].ToString();
            if (i < value2.Length) result += value2[i].ToString();
        }
        return result;
    }

用法:

        string conststr = "IHaveADream";
        string input = "ByeBye";
        var result = ConcatStrings(conststr, input);
        Console.WriteLine(result);

输出:IBHyaevBeyAeDream

p.S。刚刚检查了两个方法的性能(使用strBuilder和简单取消),似乎这两个方法都需要相同的时间来执行(如果您只有一个操作)。它的主要原因是字符串生成器需要相当长的时间来初始化,而使用串联则不需要。

但如果你必须处理1500个字符串,那就另当别论了,字符串生成器更适合你。

对于100000个方法执行,它分别显示85(str-buld)和22(concat)ms。

我的代码