Java异常求助:字符串索引越界与文件未找到问题
嘿,我来帮你逐个搞定这两个Java异常问题!
问题1:
java.lang.StringIndexOutOfBoundsException: String index out of range: 54 这个异常说白了就是你访问了字符串里根本不存在的索引位置。举个例子:如果你的字符串长度是54,那它的合法索引范围是0到53(因为Java字符串索引从0开始),当你试图访问索引54的时候,就会触发这个错误。
你可以按这些步骤排查修复:
- 先找到触发异常的代码行,看看是用了
charAt()、substring()还是其他字符串操作,确认你传入的索引值是不是超过了字符串的实际长度减1 - 加个调试输出,比如在操作字符串前打印
System.out.println("当前字符串长度:" + yourString.length());,对比一下你用的索引和实际长度 - 如果是循环遍历字符串,一定要把循环条件写成
i < yourString.length(),别写成<=,不然最后一次循环就会越界
问题2:
java.io.FileNotFoundException 与文本求和代码修复 先看这个文件找不到的异常,常见原因有这几个:
- 你写的文件路径不对,比如拼写错误、文件夹名称写错
- 目标文件根本不存在,去桌面检查一下
text.txt和temp.txt是不是真的在那里 - 你的程序没有读取该文件的权限(不过桌面文件一般不会有这个问题,还是先优先检查前两点)
再看你的代码,发现Scanner的用法完全错了!你写的new Scanner(path)是把路径字符串本身当成输入内容,而不是去读取路径指向的文件!而且你还重复给sc赋值,把第一个文件的Scanner直接覆盖了,根本没读到第一个文件的内容。
给你一个修复好的完整代码,顺便优化了资源管理:
import java.io.File; import java.io.IOException; import java.util.Scanner; public class TextFileSum { public static void main(String[] args) throws IOException { String path = "C:/Users/MYPC/Desktop/text.txt"; String path2 = "C:/Users/MYPC/Desktop/temp.txt"; // 先提前检查文件是否存在,避免抛出异常 File file1 = new File(path); File file2 = new File(path2); if (!file1.exists()) { System.out.println("错误:找不到文件 -> " + path); return; } if (!file2.exists()) { System.out.println("错误:找不到文件 -> " + path2); return; } int totalSum = 0; // 读取第一个文件的整数,用try-with-resources自动关闭资源 try (Scanner scanner1 = new Scanner(file1)) { while (scanner1.hasNextInt()) { totalSum += scanner1.nextInt(); } } // 读取第二个文件的整数 try (Scanner scanner2 = new Scanner(file2)) { while (scanner2.hasNextInt()) { totalSum += scanner2.nextInt(); } } System.out.println("两个文件的整数总和是:" + totalSum); } }
这个修复版本的关键点:
- 用
File对象提前检查文件是否存在,提前给出明确的错误提示 - 分别创建两个Scanner读取不同文件,不会互相覆盖
- 使用
try-with-resources语法,不用手动关闭Scanner,避免资源泄漏 - 用
hasNextInt()判断是否还有整数可以读取,避免读取到非整数内容时抛出异常
内容的提问来源于stack exchange,提问作者coc champ
相关产品推荐
相关产品推荐

