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

如何实现Scanner输入匹配文本文件行并修复代码逻辑问题?

问题分析与修复方案

我来帮你看看这段代码的问题在哪——确实,你的逻辑里有几个关键的小错误,导致if/else完全没按预期工作:

核心问题点

  • 未循环更新待判断的行:你只在循环外读取了文件的第一行fileScanner.nextLine()到fileScannerLine,之后循环里一直用这一行来判断,根本没去读文件的其他内容。
  • 读取行的逻辑混乱:循环里的fileScanner.nextLine()会跳过当前行去读下一行,不管匹配与否都会打乱行的遍历顺序,甚至不匹配时会陷入死循环(因为没读取新行,hasNext()一直为true)。
  • 错误提示时机不对:现在每一行不匹配就立刻输出错误,而应该是遍历完所有行都没找到匹配项时,才提示用户输入无效。
  • 大小写匹配不一致:你把输入转成了小写,但文件里的行没有转小写,会导致大小写不同时匹配失败(比如文件里是Inception,输入inception就匹配不到)。

修复后的代码

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class FilmFinder {
    public static void main(String[] args) {
        Scanner editScanner = new Scanner(System.in);
        System.out.print("请输入要查找的电影名称:");
        // 把输入转成小写,统一匹配规则
        String target = editScanner.nextLine().toLowerCase();
        editScanner.close();

        boolean filmFound = false;

        // 使用try-with-resources自动关闭文件扫描器,避免资源泄漏
        try (Scanner fileScanner = new Scanner(new File("src/FilmInfo.dat"))) {
            // 遍历文件的每一行
            while (fileScanner.hasNextLine()) {
                String currentLine = fileScanner.nextLine();
                // 把行内容也转成小写,实现大小写不敏感匹配
                if (currentLine.toLowerCase().contains(target)) {
                    System.out.println("找到匹配的电影:" + currentLine);
                    filmFound = true;
                    // 如果只需要找第一个匹配项,可以在这里加break;
                }
            }

            // 遍历完所有行后,再判断是否找到
            if (!filmFound) {
                System.out.println("Film name is not recognised in your collection, please enter a film name that is in your collection.");
            }
        } catch (FileNotFoundException e) {
            System.out.println("找不到文件src/FilmInfo.dat,请检查路径是否正确。");
            e.printStackTrace();
        }
    }
}

关键改动说明

  • 统一大小写匹配:把输入和文件行都转成小写,确保匹配不受大小写影响。
  • 逐行遍历逻辑:在循环内每次读取一行currentLine,确保每一行都被判断到。
  • 添加找到标志位:用filmFound记录是否找到匹配项,遍历结束后再决定是否输出错误提示,避免频繁弹出错误。
  • 资源自动管理:用try-with-resources创建文件扫描器,程序结束时会自动关闭,避免资源泄漏。
  • 异常处理:捕获FileNotFoundException,处理文件不存在的情况,让程序更健壮。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:45:17