HashMap containsKey винаги връща false за същия низ

Анализирам от файл, където имам имена на градове и разстояния до други градове в този формат:

"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!");
}

}


person Slayahh    schedule 01.05.2018    source източник
comment
String.equals() ще сравни текста в случай на низове. Имате ли пример какво точно се е провалило?   -  person achAmháin    schedule 01.05.2018
comment
Да, добавих ред булев тест = map.containsKey(parts[0]) над map.get() и той върна false   -  person Slayahh    schedule 01.05.2018
comment
Ако отпечатате parts[0] и ключовете от картата, parts[0] съществува ли в нея?   -  person achAmháin    schedule 01.05.2018
comment
Поставяте цялото temp в hashmap като ключ, а не parts[0] - това ли искахте да направите? В това else - проверете как изглежда temp точно преди да го поставите   -  person David Lavender    schedule 01.05.2018
comment
Ако temp не съдържа разстояние, то просто се поставя на картата като Сан Антонио или Вашингтон. Ще опитам това, което @notyou каза сега.   -  person Slayahh    schedule 01.05.2018
comment
Мисля, че открих грешката, изглежда, че всичките ми въведени данни от градове имат допълнително празно пространство след тях, така че ще се опитам да го премахна и ще опитам отново, благодаря.   -  person Slayahh    schedule 01.05.2018


Отговори (1)


Изпълних вашия код и по-долу е картата, когато достигне ред, който отпечатва „Готово“:

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"

Какъв точно беше проблемът? Видяхте ли какви бяха стойностите на вашата карта точно преди да излезе от метода?

person Bilguun    schedule 01.05.2018