Java捕获数组越界异常后如何继续处理后续输入表达式
问题原因
你当前的异常捕获逻辑粒度不对:把整个文件读行循环全包在了外层try块里,catch块中又重复写了一套没有任何异常保护的读行处理逻辑。第一次触发越界异常进入catch块后,只要后续再碰到非法表达式抛出ArrayIndexOutOfBoundsException,外层没有对应的捕获逻辑,程序就会直接崩溃。另外重复写两套完全一致的读行+转换逻辑本身就是冗余实现,很容易引入逻辑漏洞。
修复方案
- 把异常捕获的粒度缩小到单行表达式处理的层级,不要把整个读文件循环包在try里
- 删除catch块中重复编写的读行循环逻辑,捕获到当前行的非法异常后,打印提示直接进入下一轮循环即可
- 推荐使用try-with-resources语法自动管理输入流资源,避免手动关流可能出现的资源泄漏问题
修正后的核心代码如下:
public class Main { public static void main(String[] args) { // 自动关闭输入流,无需手动维护资源释放 try (BufferedReader input = new BufferedReader(new FileReader("/Users/khadishaarip/Desktop/requiredinput.txt"))) { String prefix_exp; // 统一的读行循环,不用重复写遍历逻辑 while ((prefix_exp = input.readLine()) != null) { try { PrefixConverter converter = new PrefixConverter(); System.out.println("Postfix : " + converter.preToPost(prefix_exp)); } catch (ArrayIndexOutOfBoundsException e) { // 仅当前非法行触发提示,不中断整个文件读取流程 System.out.println("Too many operators"); } } } catch (IOException error) { System.out.println("The file does not exist"); } } }
效果说明
调整后不管是单个非法行还是连续多个非法行,每一行的转换异常都会被单独捕获处理,不会跳出外层的文件读循环,处理完非法行的提示后会自动继续读取下一行内容,完全匹配预期的输出逻辑。
内容的提问来源于stack exchange,提问作者ka177
相关产品推荐
相关产品推荐

