我在 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;
}
如果您有任何问题,请不要犹豫。
使用字符串生成器和 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
- Linq 序列不包含任何元素
- 从 c# 中的多级(嵌套)XML 文档访问元素
- 在所有脚本中找不到默认端点元素错误
- 通过文本框在 SQL Server 2005 中存储数据时出错
- C# 递归,用于在打开的对话框中查找自动化元素
- 为什么我不能使用 LINQ 在 WinRT 中获取 XML 元素
- 将几个元素传递给方法
- 从 jQuery 调用 Web 方法时出错
- 如何规范化浮点集合,使所有元素的总和为 X
- 插入强制转换数据和空字段 C# 时出错
- 使用 Take 获取泛型列表的前 10 个元素时出错
- C# - System.Web.HttpParseException 在@if内具有未关闭的 HTML 元素时出错
- 我在 c# 中复制字符数组中的特定元素时出错
- 无法识别的元素';添加';读取web.config时出错
- 等待IObservable获取所有元素出错
- 反序列化类型为..的对象时出错.结束元素'…'From namespace ''预期.发
- 指定的元素已经是另一个元素的逻辑子元素.先断开连接"第二次调用窗口时出错
- 将元素添加到对象列表时出错
- 元素已经是另一个元素的子元素.添加到集合时出错
- 如何修复“配置系统初始化失败/根元素丢失”;加载配置文件时出错