首页 > 解决方案 > Java hashmap 找不到现有条目

问题描述

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

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

如您所见,“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

标签: javacsv

解决方案


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

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


推荐阅读