Почему containsKey (String) возвращает false в моей программе, хотя ключ присутствует и идентичен? - PullRequest
0 голосов
/ 06 февраля 2020

Я пишу программу, которая читает строки из файла.
Используется HashMap<String,Class>. Например, используемый ключ "inboundtcp".
При чтении первой строки из буферизованного чтения, hasKmap (ключ) hashmap возвращает false, и добавляется новая запись, очевидный случай. Однако, если есть другая строка с ключом "inboundtcp", содержит ключ (ключ), возвращает false.
Я установил точку останова и увидел, что hashCode отличается. Он добавляется как новая запись. Для всех других последующих чтений, после второго чтения, из файла containsKey (ключ) возвращает 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);
                }
              }
            }


Я сослался на все соответствующие сообщения, но не смог найти решение. Класс String уже реализует методы hashCode () и equals (), но почему это происходит?

1 Ответ

0 голосов
/ 06 февраля 2020

Проблема была в том, что мой csv был в формате utf-8 байт .csv. Когда я перешел на формат .csv в MS-Excel, хэш-карта смогла вернуть значение true для ключа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...