【发布时间】:2018-05-01 15:06:23
【问题描述】:
我正在从一个文件中解析,其中我有这种格式的城市名称和到其他城市的距离:
"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!");
}
}
【问题讨论】:
-
String.equals()将比较字符串情况下的文本。你有什么失败的例子吗? -
是的,我在 map.get() 上方添加了一行 boolean test = map.containsKey(parts[0]) 并返回 false
-
如果打印
parts[0]和地图中的键,parts[0]是否存在于其中? -
您将整个
temp作为键放入哈希图中,而不是parts[0]- 您是故意这样做的吗?在那个else- 在你放入之前检查temp的样子 -
如果
temp不包含距离,则它只是在地图中以““San Antonio”或“Washington”的形式出现。打算试试@notyou 现在说的。
标签: java string object hashmap containskey