读取文件时首次获取的字符串长度为何少1?
解决第一个课程名称长度少1的问题
这种情况我之前碰到过好几次,大概率是读取逻辑的小疏漏或者文件的隐藏标记搞的鬼,给你几个实用的排查和解决方向:
一、检查读取代码是否误吞了第一个字符
先盯紧你的读取逻辑,有没有在获取第一个课程名称前,额外调用了一次read()或者类似方法?比如下面这种很容易犯的错误写法:
// 错误示例:不小心提前读了一个字符却没处理 FileReader reader = new FileReader("input.txt"); reader.read(); // 这行直接吃掉了第一个字符! BufferedReader br = new BufferedReader(reader); String firstClass = br.readLine(); System.out.println(firstClass.length()); // 结果自然比实际少1
修复方式:删掉多余的read()调用,确保第一次读取就完整拿到整个字符串。
二、检查输入文件开头的隐藏BOM标记
如果你的文件是用UTF-8编码保存的,部分Windows编辑器(比如系统自带的记事本)会自动在文件开头添加UTF-8 BOM(三个不可见字节EF BB BF)。有些读取工具不会自动处理这个标记,可能干扰第一个字符串的读取:
- 你可以用十六进制编辑器打开文件,看看开头是不是有这三个字节;
- 解决办法:
- 用VS Code、Notepad++这类编辑器重新保存文件,选择「UTF-8无BOM」编码;
- 或者在代码里手动跳过BOM:比如Java中可以用
InputStreamReader指定编码,同时检查并跳过开头的BOM字节。
三、验证第一个字符串的实际内容
你可以在代码里给读取到的第一个字符串加上前后标记再打印,比如:
System.out.println("[" + firstClass + "]");
这样就能直观看到是不是真的少了字符(比如原本应该是[Java Programming: 101],结果输出[ava Programming: 101],那就是第一个字符J被误吞了),或者有没有隐藏的不可见字符干扰计数。
内容的提问来源于stack exchange,提问作者KhanKhuu
相关产品推荐
相关产品推荐

