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

如何在C#中移除字符串非数字字符?WinForm计算器开发需求

Windows窗体计算器文本框无效字符处理方案

问题分析

你在开发计算器时,想要移除TextBox中的空格、特殊符号及字母以避免FormatException,但现有代码遇到两个问题:

  • 直接通过索引修改textBox1.Text[i]报错,因为C#中string是不可变类型,无法直接修改单个字符;
  • 使用Remove(i)方法会删除从无效字符位置开始的所有后续内容,不符合只删除当前无效字符的需求。

可行解决方案

方案1:使用StringBuilder构建有效字符串

遍历文本框的每个字符,仅保留数字和小数点(额外处理多个小数点的情况,确保只有一个):

// 处理末尾是小数点的情况
if (!string.IsNullOrEmpty(textBox1.Text) && textBox1.Text.EndsWith("."))
{
    textBox1.Text += "0";
}

StringBuilder validText = new StringBuilder();
bool hasDecimal = false; // 标记是否已添加小数点

foreach (char c in textBox1.Text)
{
    if (char.IsDigit(c))
    {
        validText.Append(c);
    }
    else if (c == '.' && !hasDecimal)
    {
        validText.Append(c);
        hasDecimal = true;
    }
    // 其他无效字符直接跳过
}

textBox1.Text = validText.ToString();

// 若支持小数运算,改用Convert.ToDouble而非Convert.ToInt32
double number = Convert.ToDouble(textBox1.Text);
calculatorBLL.OperatorClicked(Operator, number);

方案2:使用正则表达式快速替换

用正则匹配所有非数字和非小数点的字符,直接替换为空,代码更简洁:

// 处理末尾小数点
if (!string.IsNullOrEmpty(textBox1.Text) && textBox1.Text.EndsWith("."))
{
    textBox1.Text += "0";
}

// 替换所有非数字、非小数点的字符
textBox1.Text = System.Text.RegularExpressions.Regex.Replace(textBox1.Text, @"[^0-9.]", "");

// 确保文本中只有一个小数点
int dotIndex = textBox1.Text.IndexOf('.');
if (dotIndex != -1 && textBox1.Text.IndexOf('.', dotIndex + 1) != -1)
{
    textBox1.Text = textBox1.Text.Substring(0, dotIndex + 1) + textBox1.Text.Substring(dotIndex + 1).Replace(".", "");
}

double number = Convert.ToDouble(textBox1.Text);
calculatorBLL.OperatorClicked(Operator, number);

补充优化

可以在TextBox的KeyPress事件中直接拦截无效输入,从源头避免无效字符进入文本框:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    // 只允许数字、小数点和退格键
    if (!char.IsDigit(e.KeyChar) && e.KeyChar != '.' && e.KeyChar != (char)Keys.Back)
    {
        e.Handled = true; // 取消输入
    }
    // 限制只能输入一个小数点
    if (e.KeyChar == '.' && (sender as TextBox).Text.Contains("."))
    {
        e.Handled = true;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 14:57:50