You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C# WinForm中拆分输入字符串并填充至不同TextBox控件

C# 字符串解析异常修复方案

问题根因

你当前代码硬编码了Substring方法的截取起止索引,完全依赖输入内容长度刚好匹配预设值,一旦姓名长度发生变化,要么截取到错误内容,要么直接触发ArgumentOutOfRangeException越界异常,也就是你遇到的报错。

替代解决方案(无需硬编码Substring)

方案1:字符串分割(最适配当前场景)

逻辑简单、性能开销低,完全适配你Name:xxx/age:xx的固定分隔符输入格式

private void btnManipulate_Click(object sender, EventArgs e)
{
    string input = inputString.Text.Trim();
    // 按分隔符/拆分出姓名段和年龄段
    string[] contentParts = input.Split('/');
    if (contentParts.Length != 2)
    {
        MessageBox.Show("输入格式错误,请遵循Name:xxx/age:xx格式填写");
        return;
    }
    // 提取姓名
    string[] nameParts = contentParts[0].Split(':');
    if (nameParts.Length != 2)
    {
        MessageBox.Show("姓名字段格式错误");
        return;
    }
    resultName.Text = nameParts[1].Trim();
    // 提取年龄,增加格式校验
    string[] ageParts = contentParts[1].Split(':');
    if (ageParts.Length != 2 || !int.TryParse(ageParts[1].Trim(), out _))
    {
        MessageBox.Show("年龄字段格式错误,请输入数字");
        return;
    }
    resultAge.Text = ageParts[1].Trim();
}

方案2:正则表达式匹配(适合复杂格式场景)

自带严格格式校验,容错率高,适合后续输入格式扩展的场景
首先需要引入命名空间:
using System.Text.RegularExpressions;
对应事件代码:

private void btnManipulate_Click(object sender, EventArgs e)
{
    string input = inputString.Text.Trim();
    // 正则规则直接分组匹配姓名和年龄
    Regex inputRule = new Regex(@"^Name:(?<name>[^/]+)/age:(?<age>\d+)$");
    Match matchResult = inputRule.Match(input);
    if (!matchResult.Success)
    {
        MessageBox.Show("输入格式不符合要求");
        return;
    }
    resultName.Text = matchResult.Groups["name"].Value;
    resultAge.Text = matchResult.Groups["age"].Value;
}

若需保留Substring的修正方案

不要硬编码截取长度,通过IndexOf动态计算分隔符位置再截取:

private void btnManipulate_Click(object sender, EventArgs e)
{
    string input = inputString.Text.Trim();
    int nameColonPos = input.IndexOf(':');
    int splitSlashPos = input.IndexOf('/');
    int ageColonPos = input.IndexOf(':', splitSlashPos);
    // 格式合法性校验
    if (nameColonPos < 0 || splitSlashPos < 0 || ageColonPos < 0)
    {
        MessageBox.Show("输入格式错误");
        return;
    }
    // 动态计算截取长度
    resultName.Text = input.Substring(nameColonPos + 1, splitSlashPos - nameColonPos - 1).Trim();
    resultAge.Text = input.Substring(ageColonPos + 1).Trim();
}

内容的提问来源于stack exchange,提问作者anony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 01:36:04