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

Integer.parseInt转换文本值报错求助:Java代码执行异常

解决Integer.parseInt转换时的Conversion Error问题

嘿,我来帮你搞定这个转换错误的问题!你遇到的其实是NumberFormatException(也就是你说的Conversion error),本质是传给Integer.parseInt()的字符串不是有效的整数格式,咱们一步步排查和解决:

一、先搞懂错误根源

你的代码里有两个转换点容易出问题:

  • int intAmt = Integer.parseInt(amt);:amt来自scr.getText(),如果用户输入了空格、字母、小数点,或者直接留空,转换就会失败
  • int intBal = Integer.parseInt(bal);:bal是从字符串a截取的最后一段,如果a的格式不符合预期(比如没有空格、截取后的内容带非数字字符),也会触发错误

二、给你一套健壮的修复代码

我给你调整了逻辑,加上输入验证和异常捕获,确保程序不会因为格式问题崩溃:

bt36.addActionListener(new ActionListener(){ 
    @Override 
    public void actionPerformed(ActionEvent e){ 
        // 先处理用户输入的金额:去掉前后空格,验证格式
        String amt = scr.getText().trim();
        if (!amt.matches("\\d+")) {
            JOptionPane.showMessageDialog(null, "请输入有效的整数金额哦");
            return;
        }

        // 处理余额截取:先检查字符串a的格式是否正确
        int spaceIndex = a.lastIndexOf(" ");
        String bal;
        if (spaceIndex == -1) {
            JOptionPane.showMessageDialog(null, "余额信息格式不对,请检查");
            return;
        } else {
            bal = a.substring(spaceIndex + 1).trim();
            // 再验证余额是否是纯数字
            if (!bal.matches("\\d+")) {
                JOptionPane.showMessageDialog(null, "余额格式异常");
                return;
            }
        }

        // 安全执行转换和业务逻辑
        try {
            int intAmt = Integer.parseInt(amt);
            int intBal = Integer.parseInt(bal);
            int remBal;
            
            if ((intBal - intAmt) < 0){
                JOptionPane.showMessageDialog(null, "insufficient funds, try a lower amount");
            } else {
                remBal = intBal - intAmt;
                // 这里可以补充你的后续逻辑,比如更新余额显示
                JOptionPane.showMessageDialog(null, "取款成功!剩余余额:" + remBal);
            }
        } catch (NumberFormatException ex) {
            JOptionPane.showMessageDialog(null, "数据格式错误,请检查输入或余额信息");
            ex.printStackTrace(); // 控制台打印异常细节,方便你调试
        }
    }
});

三、额外的小提醒

  • 如果你的业务允许小数金额(比如带角分的钱),别用Integer.parseInt(),换成Double.parseDouble()或者BigDecimal更合适
  • 永远不要假设用户输入/截取的内容一定符合预期,前置验证+异常捕获能让你的程序稳很多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:14:37