一个神奇又有意思的Bug--------BufferedReader.readLine()方法读取文件第一行的bug

前言

先讲讲我是怎么发现这个bug的
当时公司让我写一个文件上传导入词库的功能,用来接收.txt格式的文件,文件格式是规定死的,必须为一行一个词,后台对词进行判重,重复就无法添加进去。
写完之后,多次测试,文件中从第二行开始的词,重复的进不去,正常,不重复的正常添加,正常,但是唯独第一行,不重复的时候可以正常添加,重复的时候本应该添加不进去,但是神奇就神奇在这里,它也添加进去了。

刚开始觉得不可思议,以为是前台传至后台时文件内容发生改变,但是后面排除这个可能!然后开始一步一步打断点,发现在判重的时候 aa与aa比较的时候居然是false!
我的天呐
当时我就是这个表情
然后后面经过我多方查阅资料以及咨询大佬(哈哈哈装个b.大家不要介意)
最终发现是.BufferedReader.readLine()读取第一行会出现bug,首行第一个字符会是一个空字符 我们可以手动替换掉!

代码如下(扯了半天现在才来正文 哈哈)

BufferedReader is =new BufferedReader(构造参数); 
String str =is.readLine() 
char c = str.charAt(0); 
这时你会发现并不是你文件第一行的首个字符,而是一个空字符(不是空字符串)也就是说string的trim()方法在这里并不管用,但读取第二行就不会出现这问题。 
解决方法:就是把第一行的第一个字符去掉。 
String str =is.readLine(); 
char s =str.trim().charAt(0); 
//65279是空字符 
if(s==65279){ 
  if(str.length()>1){ 
     str=str.substring(1); 
  } 
} 

如果对您有帮助的话希望您点个赞呦!谢谢您

发布了6 篇原创文章 · 获赞 32 · 访问量 745

猜你喜欢

转载自blog.csdn.net/weixin_44793294/article/details/103919393