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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:17:41