Java hashmap无法找到现有条目

tom*_*tom 2 java csv

我遇到了一个非常奇怪的问题:我编写了一个CSV解析器,它将第一行作为标题读取,然后创建一个映射,其中key是标题,value是后续行中的值.

问题是地图似乎无法检索第一列标题的值.如下所示: 在此输入图像描述

正如您所看到的,"abc"位于HashMap条目#23中,但是当我检索它时,它将显示为null.

我认为它与我的CSV文件有关,但为什么地图条目在调试器上正确显示但无法检索?

我的CSV文件如下所示:

abc,数据源,实体,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 ,23,24 NA,source1,entity1,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124

Joh*_*ger 8

你观察调试结果的唯一合理的解释是,第一列标题是不实际"abc".它可能包含一个或多个附加的非打印字符.它们当然不会在调试器的地图内容列表中打印,但它们仍然存在,所以地图中确实没有键"abc".它实际上是类似的东西"<some_non-printing_character>abc".或者,可能是您在显示器上呈现的字符不同.无论哪种方式,使用十六进制编辑器检查输入文件以查看真相.

有问题的列是第一个,可能是额外字符的候选者是Unicode BOM,U + FEFF,显示为文件的第一个字符.一些文本编辑器会将这样的字符作为幻数标记文件插入为UTF-8编码,但实际上UTF-8并不要求这样,并且除了它本身以外,对这样的字符没有任何意义.