前言
先讲讲我是怎么发现这个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);
}
}
如果对您有帮助的话希望您点个赞呦!谢谢您