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

输入字符串$15时触发IndexOutOfBounds Exception的原因及修复咨询

关于输入$15时抛出IndexOutOfBoundsException的问题分析

嘿,我来帮你拆解这个问题!当输入是$15时触发索引越界异常,大概率是你的代码在处理字符串索引时没做好边界校验,或者对字符串结构的假设太想当然了。

常见诱因(针对$15场景)

  • 循环边界写错:比如你写了类似这样的循环,想跳过$处理后面的数字,但循环条件用了<=而不是<:
    for (int i = 1; i <= str.length(); i++) {
        char digit = str.charAt(i); // 当i=3时,str.length()是3,索引3不存在,直接抛异常
    }
    `$15`的长度是3,合法索引范围是0-2,当循环到i=3时就会触发越界。
    
  • substring参数超出范围:如果错误地写了str.substring(2, 4)这种代码,$15的长度只有3,结束索引4超出了字符串的最大长度(3),会直接抛出异常。
  • 盲目访问拆分后的数组元素:比如你想用split拆分$和数字,但没检查数组长度就直接取元素。虽然$15拆分后数组是["", "15"],取索引1没问题,但如果代码逻辑错误地取了索引2,或者输入格式突变时(比如只有$没有数字),就会触发异常。

修改方案(阻止异常发生)

  • 严格校验索引边界:在调用charAt(i)、substring(start, end)这类方法前,先确认索引在合法范围内。比如把循环条件改成:
    for (int i = 1; i < str.length(); i++) { // 用<替代<=,确保i不会等于str.length()
        char digit = str.charAt(i);
    }
    
  • 拆分后先检查数组长度:如果用split处理字符串,先判断数组长度是否满足需求再访问元素:
    String[] parts = str.split("\\$");
    if (parts.length >= 2 && !parts[1].isEmpty()) {
        int amount = Integer.parseInt(parts[1]);
        // 后续业务处理
    } else {
        System.out.println("输入格式错误,请检查金额字符串");
    }
    
  • 针对金额字符串的稳妥处理逻辑:先判断字符串是否以$开头,同时确保开头后还有内容,再进行截取:
    if (str != null && str.startsWith("$") && str.length() > 1) {
        String numStr = str.substring(1);
        try {
            int amount = Integer.parseInt(numStr);
            System.out.println("解析后的金额:" + amount);
        } catch (NumberFormatException e) {
            System.out.println("金额格式错误,不是有效数字");
        }
    } else {
        System.out.println("输入格式错误,请输入类似$15的金额字符串");
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:19:53