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

如何使用BufferedReader将用户输入与文本文件内容进行对比?

问题排查
  • 核心逻辑错误:wordIsThere方法的循环条件中,直接将文件读取结果赋值给了存储用户输入的findMe变量,直接覆盖了原本要匹配的目标内容,匹配逻辑从根源失效。
  • 文件内容漏读:循环体内又额外调用了一次bufferedReader.readLine(),每次循环会连续读取2行,仅比对第2、4、6等偶数行,所有奇数行直接被跳过。
  • 资源泄漏风险:BufferedReader使用完成后没有主动关闭,长期运行会造成IO资源占用。
  • 编码适配问题:FileReader默认使用操作系统编码读取文件,若txt文件的保存编码和系统编码不一致,会读取到乱码,导致匹配失败。
修复后的完整代码
import javax.swing.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;

public class Lab5Program1 {
    public static void main(String[] args) throws IOException {
        File file = new File("fileName");
        // 改用try-with-resources自动关闭流,指定UTF-8编码避免乱码
        try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8))) {
            String isOrIsNot, inputWord;
            inputWord = JOptionPane.showInputDialog(null, "Enter a word in all lower case:");
            if (wordIsThere(inputWord, br))
                isOrIsNot = "is";
            else
                isOrIsNot = "is not";
            JOptionPane.showMessageDialog(null, "The word " + inputWord + " " + isOrIsNot + " on the list.");
        }
    }

    public static boolean wordIsThere(String findMe, BufferedReader bufferedReader) throws IOException {
        String line;
        // 单独用变量存储读取到的每行内容,不覆盖目标匹配词
        while((line = bufferedReader.readLine()) != null) {
            // trim去除首尾空白,避免因为换行残留、空格导致匹配失败
            if (findMe.equals(line.trim())){
                return true;
            }
        }
        return false;
    }
}
优化建议
  • 提前加载单词到内存:如果需要多次校验单词,不要每次校验都重新读取文件。可以在程序启动时一次性把所有单词读取到HashSet中,后续查找的时间复杂度从O(n)降低到O(1),性能提升明显。
  • 增加容错规则:可以将用户输入和读取到的单词统一转为小写/大写后再匹配,避免大小写不一致导致匹配失败。
  • 增加异常处理:提前判断文件是否存在、是否可读,避免程序直接崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:00:00