当前位置: 首页 > 知识库问答 >
问题:

为什么containsKey(String)在我的程序中返回false,尽管键是存在的并且是相同的?

宦书
2023-03-14

我正在写一个从文件中读取行的程序。
正在使用hashmap 。例如,使用的密钥是“InboundTCP”。
从缓冲读取器读取第一行时,hashmap的containsKey(key)返回false,并添加一个新条目,这是显而易见的情况。但是,如果有另一行带有键“InboundTCP”,则containskey(key)返回false。
我放置了一个断点,并看到哈希代码不同。它将作为新条目添加。对于所有其他后续读取,在第二次读取之后,从文件中,containsKey(key)返回true

 BufferedReader br = new BufferedReader(new FileReader(filePath));
          String line;
          while ((line = br.readLine()) != null) {
            String[] fields = line.split(",");
            String trafficDirection=fields[0].trim();
            String trafficProtocol=fields[1].trim();
            String portValue=fields[2];
            String ipAddressValue=fields[3].trim();
            String key=trafficDirection+trafficProtocol;
            if(rulesMap.containsKey(key)){
                PortsAndIP result=insertPortAndIPAddress(portValue,ipAddressValue);
                ArrayList<PortsAndIP> existingData= (ArrayList<PortsAndIP>) rulesMap.get(trafficDirection+trafficProtocol);
                existingData.add(result);
                rulesMap.put(new String(trafficDirection+trafficProtocol),existingData);
            }
            else {
                ArrayList<PortsAndIP> data= new ArrayList<PortsAndIP>();
                PortsAndIP result=insertPortAndIPAddress(portValue,ipAddressValue);
                if(result!=null) {
                    data.add(result);
                    rulesMap.put(new String(trafficDirection+trafficProtocol),data);
                }
              }
            }


我参考了所有相关的帖子,但无法得到一个html" target="_blank">解决方案。String类已经实现了hashCode()和equals()方法,但为什么会出现这种情况呢?

共有1个答案

沈弘文
2023-03-14

问题是我的csv是utf-8字节.csv格式。当我在MS-Excel中更改为.csv格式时,hashmap能够为键返回true。

 类似资料:
  • 抱歉,如果这是基本的,但我正在启动java和这不是任何作业,但为什么我的简单测试程序失败?

  • 我正在解析一个文件,其中有城市名和到其他城市的距离,格式如下: 我认为问题在于,当我分割字符串时,它创建了不同的对象,并且由于某种原因,string.equals和/或hashcode()给出了不同的结果。因此,map.get(key)返回空值。但我不知道如何解决这个问题。 }

  • 在.NET Framework 4.5中,由Trim()方法调用的专用TrimHelper()方法使用以下条件来确定是否需要修剪字符:(由.NET Reflector反编译的代码) 我想知道为什么IsBOMWhitesspace方法总是返回false?? 这是微软计划在未来改变/扩展的吗?例如,通过检查char是否为‘u efff’并在这种情况下返回true?

  • 问题内容: 据我所知,使用或实例化对象分别返回或的新实例。具有 新标识 的新实例对象。 在我实际测试它之前,这对我来说是很清楚的,我注意到它实际上返回了而不是预期的: 如预期的那样,分别使用和创建对象时,也会表现出这种行为: 我可以在状态文档中找到唯一相关的信息: […]例如,return和return 。 如果未提供任何参数,则构造函数将创建一个新的空元组。 可以说,这不足以回答我的问题。 那么

  • 问题内容: 我找到了JavaDoc的方法: 返回:如果此线程已被中断,则返回true;否则返回false。 否则为假。 我对这种方法的理解有误。此外,我可能会误解Thread中的“中断”概念。 欢迎任何解释!谢谢! 程式码片段: 在线程定义中: 调用: 问题答案: 引发异常后,线程不再处于中断状态。

  • 我正在用FFProbe测试一个带有H264视频的mp4文件。我正在使用以下命令来获取帧信息。 我得到以下输出。