相同的文本hashcode不一样

背景:公司每月提供一个大的考勤 表,需要员工自己将打卡时间按照模板规范填入另外 一个文档中,一直都是复制,粘贴且效率极慢,就想做一个代码批量处理

(一天只需要打上班卡和下班卡,有时加班,怕下班忘记打卡,就在下班时间点先打一个卡,真正下班再打一个卡,这样就导致一天有多个卡点)

思路:

1、以日期为hashMap的key值,打卡时间为value值放到map里

2、小于12点为上班卡点取最小的值,大于12点为下班卡点取最大的值

问题:

输出结果:2020/4/1 的卡点为空,其它时间点都有的,当时把这个代码也给同事用了,他的4月1号卡点也没有,我们就在想当天为什么没有打卡,是不是当天有放假(对自己的代码太自信了[尴尬]),在其他的同事帮助下才发现当天有打卡,

1)发现问题解决问题是一贯作风,一步一步调试,发现  2020/4/1是有入到hashMap里面,但就是读不出来,自己也验证过,没有空格,文本完全一样,

2)后来发现 2020/4/1 的2020 前面有个占位符,不是空格,就是单纯的占位符,

3)用replaceAll("^\\s", "");  也去不掉前面的占位符

 

原因:

那个空的占位符到底是什么?

1)可以将读取的到文本转换为字节  line.getBytes() 

2)将读取的文本用notepad打开,以16进制查看

 

对应关系:

2020/4/1 8:28:41ef bb bf 32 30 32 30 2f 34 2f 31 20 38 3a 32 38 3a 34 31 0a  
2020/4/1 17:36:3332 30 32 30 2f 34 2f 31 20 31 37 3a 33 36 3a 33 33 0a  
  
  

 

 

 

 

 

由此可以第一行相较第二行里面多了ef bb bf 这个是表示文本的编码格式,也就是我们所说的【魔数】,可以了解 下class类的魔数。

解决:

用subString作文本截取了  line.substring(line.indexOf("2"),line.length());就解决了不知道还有没有更高效的方法,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值