输入字符串$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
相关产品推荐
相关产品推荐

