我在 c# 中复制字符数组中的特定元素时出错

本文关键字:元素 出错 数组 复制 字符 我在 | 更新日期: 2023-09-27 18:32:37

我正在编写代码..但是我遇到了一个问题..我试图解决,但我无法解决

我试图让它将特定元素复制到另一个字符数组的代码,顺便说一句,我是 C# 的新手。

这是我的代码:

        private void button5_Click(object sender, EventArgs e)
    {
        char[] A = s.ToCharArray();
        char[] B = new char[0];
        int i = 0;
        int start, end;
        int x = A.Length;
        string Bb ;
        while (x >0)
        {
            start = i + 1;
            end = start + 1;
            i = end + 2;
            Array.Copy(A, start, B, end, 2);
            x--;
        }
        Bb = new string(B);
        textBox6.Text = Bb;
    }

如果您有任何问题,请不要犹豫。

我在 c# 中复制字符数组中的特定元素时出错

使用字符串生成器和 for 循环来迭代字符不是更好吗,例如:

StringBuilder sb = new StringBuilder();
for (int i = 1; i < s.Length - 1; i += 4)
{
    sb.Append(s.Substring(i, 2));
}

没有尝试过这个(写在平板电脑上(,但意思应该很清楚。

有更好的方法来编写这种操作。例如,我们可以使用带有while循环的StringBuilder来实现此目的,也可以使用更高级的方法(例如 LINQ(。例如:

static private void button5_Click(object sender, EventArgs e)
{
    StringBuilder stringBuilder = new StringBuilder();
    for (int i = 1; i < s.Length - 1; i += 4)
        stringBuilder.Append(s.Substring(i, 2));
    textBox6.Text = stringBuilder.ToString();
}

这是实现此目的的一种相当简单的方法。变量命名大多很简单,并且易于阅读。

我们首先实例化一个名为 stringBuilder 的变量的新StringBuilder。这将存储我们的整个输出字符串。

使用 int i = 1 分配起始位置。这意味着我们跳过了输入字符串开头的一个字符(因为位置从零开始(。您可以通过调整此数字轻松将其更改为从其他位置开始。

现在使用 for 循环遍历我们感兴趣的所有起始位置,只要起始位置小于字符串长度和我们希望包含的字符数 ( s.Length - 1 (。在每次迭代中,我们读取从i开始并包含2字符的s Substring。我们将其附加到我们的stringBuilder

读取子字符串后,我们将i递增 4 移动到下一个起始位置。

最后在所有迭代完成后,让stringBuilder使用 ToString() 为我们生成一个新字符串,并将其分配给textBox6.Text

如果你想在末尾包含不构成"完整"Substring的元素(即末尾有一个字符(,你可以使用条件赋值来非常轻松地处理这个问题。

同样,如果要将其扩展到代码中的其他take X and skip X位置,则可以为此将循环包装到方法中。

static private string CustomTakeSkip(string inputText, int numTakeSkip)
{
    StringBuilder stringBuilder = new StringBuilder();
    for (int i = numTakeSkip - 1; i < inputText.Length; i += numTakeSkip * 2)
    {
        int nextStringLength = i + numTakeSkip > inputText.Length ? inputText.Length - i : numTakeSkip;
        stringBuilder.Append(inputText.Substring(i, nextStringLength));
    }
    return stringBuilder.ToString();
}

请注意,这包括处理您通过使用条件分配(condition ? valueWhenTrue : valueWhenFalse; nextStringLength 中描述的最终情况。

你可以这样称呼它:

textBox6.Text = CustomTakeSkip(s, 2);
textBox7.Text = CustomTakeSkip(s, 4);

初始化时需要为数组 B 指定大小。

/

/例如可以初始化为 A 的大小

字符[] B = 新字符[A.长度];

此外,您将 x 减少 1 并将 i 递增 2 倍以上,因此在从数组 A 复制到 B 时,您必然会超出索引。您可以尝试将 while 语句更新为,

while (x>0 && begin