我遇到了一个非常奇怪的问题:我写了一个CSV解析器,它将第一行作为标题读取,然后创建一个映射,其中key是标题,value是后续行中的值。
如您所见,“ abc”位于HashMap条目#23内,但是当我检索它时,它将显示为空。
我认为这与我的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
答案 0 :(得分:8)
您观察到的调试器结果的唯一可能的解释是,第一列标题实际上是{em>不是 "abc"
。其中可能包含一个或多个其他非打印字符。当然,它们不会在调试器的地图内容列表中打印,但是它们仍在其中,因此实际上键"abc"
并不存在于地图中。实际上,它类似于"<some_non-printing_character>abc"
。另外,也可能是您有不同的字符在显示器上呈现相同的字符。无论哪种方式,都可以使用十六进制编辑器检查输入文件以了解真相。
该列为第一列,一个额外字符的可能候选者是Unicode BOM U + FEFF,它显示为文件的第一字符。一些文本编辑器会插入诸如魔术数字之类的字符,将文件标记为以UTF-8进行编码,尽管实际上UTF-8并不需要这样做,并且除了赋予其本身以外,没有赋予此字符任何意义。