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

将ListBox1中字符串转Integer存入ListBox2时遇格式错误异常求助

解决字符串转Integer的格式错误问题

嘿,我完全懂你这会儿的头疼——明明清了空格,转整数还是报错,大概率是拆分后的项里藏着非数字字符,或者拆分逻辑跑出了空条目,甚至是制表符、换行这类隐藏空白在搞鬼。咱们一步步优化代码来解决:

第一步:优化第一个Button的拆分逻辑

原拆分可能只按单一分隔符处理,还没过滤无效项,比如空字符串。咱们调整成这样,确保进ListBox1的都是干净有效的内容:

private void btnSplit_Click(object sender, EventArgs e)
{
    // 先清空ListBox1避免重复添加
    listBox1.Items.Clear();
    
    string input = textBox1.Text.Trim();
    if (string.IsNullOrEmpty(input))
    {
        MessageBox.Show("请输入内容再拆分哦!");
        return;
    }
    
    // 按逗号、空格、分号拆分(可根据你的输入习惯修改分隔符),自动移除空项
    string[] parts = input.Split(new[] { ',', ' ', ';' }, StringSplitOptions.RemoveEmptyEntries);
    
    foreach (string part in parts)
    {
        string cleanedPart = part.Trim();
        if (!string.IsNullOrEmpty(cleanedPart))
        {
            listBox1.Items.Add(cleanedPart);
        }
    }
}

这里用StringSplitOptions.RemoveEmptyEntries自动干掉拆分后的空项,同时适配多种常见分隔符,避免因输入格式不一致产生无效内容。

第二步:安全转换ListBox1的项为Integer

直接用int.Parse()很容易触发异常,咱们换成int.TryParse()做安全验证,既能成功转换有效项,还能优雅处理无效内容:

private void btnConvert_Click(object sender, EventArgs e)
{
    listBox2.Items.Clear(); // 清空第二个ListBox准备存结果
    
    foreach (string item in listBox1.Items)
    {
        string cleanedItem = item.Trim(); // 再次清理,防残留空白
        
        if (int.TryParse(cleanedItem, out int result))
        {
            listBox2.Items.Add(result); // 转换成功就添加到ListBox2
        }
        else
        {
            // 可选:提示用户无效项,或者直接跳过不提示
            MessageBox.Show($"「{cleanedItem}」不是有效的整数,已跳过!");
        }
    }
}

核心改进点:

  • 用int.TryParse()替代int.Parse():它不会抛出异常,而是返回布尔值告知转换结果,同时输出成功转换的整数
  • 拆分阶段自动过滤空项,避免后续转换空字符串的错误
  • 多次清理空白字符,覆盖空格、制表符等隐藏干扰项
  • 对无效项做明确处理,程序不会直接崩溃

这么改完后,就算输入里混了点非数字内容,程序也能平稳处理,不会再弹出那个格式错误的异常啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:04:26