Java HashMap containsKey始终为同一字符串返回false

Java HashMap containsKey始终为同一字符串返回false,java,string,object,hashmap,containskey,Java,String,Object,Hashmap,Containskey,我正在解析一个文件,其中我有城市名称和与其他城市的距离,格式如下: "San Antonio" "San Francisco" Washington "San Francisco"--Weed [305] "San Francisco"--"Wisconsin Dells" [2189] Washington--"San Jose" [2909] 我认为问题在于,当我切碎字符串时,它会创建不同的对象,出于某种原因,String.equals和/或hashcode()会给出不同的结果。因

我正在解析一个文件,其中我有城市名称和与其他城市的距离,格式如下:

"San Antonio" 
"San Francisco" 
Washington 

"San Francisco"--Weed [305]
"San Francisco"--"Wisconsin Dells" [2189]
Washington--"San Jose" [2909]
我认为问题在于,当我切碎字符串时,它会创建不同的对象,出于某种原因,String.equals和/或hashcode()会给出不同的结果。因此,Map.get(key)返回空值。然而,我不知道如何解决这个问题

public class spanning {
private static HashMap<String, HashMap<String, Integer>> map = new HashMap<String, HashMap<String, Integer>>();
public static void main(String[] args) throws IOException {
    BufferedReader read = new BufferedReader(new FileReader(args[0]));
    String temp;
    while ((temp = read.readLine()) != null) {
        if (temp.contains("[")) {
            String[] parts = temp.split("--");
            String[] parts2 = parts[1].split(" \\[");
            Scanner scan;
            scan = new Scanner(parts2[1]).useDelimiter("\\D");
            int o = scan.nextInt();
            map.get(parts[0]).put(parts2[0], o);
        } else {
            map.put(temp, new HashMap<String, Integer>());

        }
    }
    System.out.println("Finished!");
}
公共类扩展{
私有静态HashMap map=newhashmap();
公共静态void main(字符串[]args)引发IOException{
BufferedReader read=新的BufferedReader(新文件读取器(args[0]);
字符串温度;
而((temp=read.readLine())!=null){
如果(温度包含(“[”)){
字符串[]部分=临时拆分(“--”);
字符串[]parts2=parts[1]。拆分(“\\[”);
扫描仪扫描;
扫描=新扫描仪(第2部分[1])。使用分隔符(\\D”);
int o=scan.nextInt();
map.get(parts[0]).put(parts2[0],o);
}否则{
put(temp,newhashmap());
}
}
System.out.println(“完成!”);
}

}

我已经运行了您的代码,下面是当它到达打印“Finished”的行时的地图:


确切的问题是什么?在映射退出方法之前,您看到它的值了吗?

String.equals()
将比较字符串的文本。您有没有确切失败的示例?是的,我在map.get()上方添加了一行boolean test=map.containsKey(parts[0])如果打印
parts[0]
和映射中的键,则返回false,其中是否存在
parts[0]
?您将整个
temp
作为键而不是
parts[0]放入hashmap中
-你的意思是这样吗?在
中,否则
-在你把
temp
放在地图上之前检查一下它的样子如果
temp
不包含距离,它只是放在地图上作为“圣安东尼奥”或“华盛顿”。现在试试@notyou说的。
map = {HashMap@634}  size = 4
 0 = {HashMap$Node@640} "" -> " size = 0"
 1 = {HashMap$Node@641} ""San Antonio"" -> " size = 0"
  key = ""San Antonio""
  value = {HashMap@647}  size = 0
 2 = {HashMap$Node@642} ""San Francisco"" -> " size = 2"
  key = ""San Francisco""
  value = {HashMap@649}  size = 2
   0 = {HashMap$Node@654} "Weed" -> "305"
   1 = {HashMap$Node@655} ""Wisconsin Dells"" -> "2189"
 3 = {HashMap$Node@643} "Washington" -> " size = 1"
  key = "Washington"
  value = {HashMap@651}  size = 1
   0 = {HashMap$Node@662} ""San Jose"" -> "2909"