Java 将输入字符串与Hashmap中的多个键进行比较 公共类测试{ 公共静态void main(字符串[]args){ HashMap cities=新HashMap(); 城市。put(“罗马”,新城(“罗马”,“意大利”,2869461)); 城市。put(“柏林”,新城(“柏林”,“德国”,3610156)); 城市。put(“里斯本”,新城(“里斯本”,“葡萄牙”,545245)); 迭代器keySetIterator=cities.keySet().Iterator(); System.out.println(“HashMap有“+cities.size()+”元素”); 系统输出打印(“输入要搜索的城市”); 扫描仪s=新的扫描仪(System.in); 字符串searchtext=s.nextLine(); System.out.println(searchtext); System.out.println(“关键结果”+cities.containsKey(searchtext)); String key=keysiterator.next(); System.out.println(“key:+key+”值:+cities.get(key.getName()); if(cities.get(key).getName()包含(searchtext)){ System.out.println(“找到的值结果”+cities.get(key.getCountry()+“”+cities.get(key.getPopulation()); }

Java 将输入字符串与Hashmap中的多个键进行比较 公共类测试{ 公共静态void main(字符串[]args){ HashMap cities=新HashMap(); 城市。put(“罗马”,新城(“罗马”,“意大利”,2869461)); 城市。put(“柏林”,新城(“柏林”,“德国”,3610156)); 城市。put(“里斯本”,新城(“里斯本”,“葡萄牙”,545245)); 迭代器keySetIterator=cities.keySet().Iterator(); System.out.println(“HashMap有“+cities.size()+”元素”); 系统输出打印(“输入要搜索的城市”); 扫描仪s=新的扫描仪(System.in); 字符串searchtext=s.nextLine(); System.out.println(searchtext); System.out.println(“关键结果”+cities.containsKey(searchtext)); String key=keysiterator.next(); System.out.println(“key:+key+”值:+cities.get(key.getName()); if(cities.get(key).getName()包含(searchtext)){ System.out.println(“找到的值结果”+cities.get(key.getCountry()+“”+cities.get(key.getPopulation()); },java,hashmap,Java,Hashmap,我在main中有这段代码,我有一个类(City),它只有getter、setter和构造函数。 当我运行代码时,只有当 searchtext=罗马 …如果我把 里斯本 代码没有插入最后一个“如果”,我不知道为什么。有什么帮助吗?Asimac 看起来你只拿到了第一把钥匙 public class Test { public static void main(String[] args) { HashMap<String, City> cities = ne

我在main中有这段代码,我有一个类(City),它只有getter、setter和构造函数。 当我运行代码时,只有当

searchtext=罗马

…如果我把

里斯本

代码没有插入最后一个“如果”,我不知道为什么。有什么帮助吗?

Asimac

看起来你只拿到了第一把钥匙

public class Test {
       public static void main(String[] args) {
        HashMap<String, City> cities = new HashMap<>();
        cities.put("Rome", new City("Rome", "Italy", 2869461));
        cities.put("Berlin", new City("Berlin", "Germany", 3610156));
        cities.put("Lisbon", new City("Lisbon", "Portugal", 545245));
        Iterator<String> keySetIterator = cities.keySet().iterator();
        System.out.println("HashMap has " + cities.size() + " elements");
        System.out.print("Enter a city to search for ");
        Scanner s = new Scanner(System.in);
        String searchtext = s.nextLine();
        System.out.println(searchtext);
        System.out.println("Key result " + cities.containsKey(searchtext));

        String key = keySetIterator.next();
            System.out.println("key: " + key + " value: " + cities.get(key).getName());
            if (cities.get(key).getName().contains(searchtext)) {
                      System.out.println("Value result found " + cities.get(key).getCountry() + " " + cities.get(key).getPopulation());
            }
我想您应该检查所有条目,而不仅仅是第一个条目

考虑一下这样的情况:

String key = keySetIterator.next();

您仅与第一个条目进行比较。
keySetIterator.next()将从迭代器中返回一个条目,并且将输入与它进行比较,这会导致问题。相反,您可以通过映射键中的键搜索输入。注意到OP:您的设计中的缺陷是,地图中的不止一个值可能具有作为其名称的子串的搜索项。at有搜索词为“New”的城市“New York”、“New London”、“New Brunswick”和“New Orleans”。迭代器算法应该返回什么?
while(keySetIterator.hasNext()){
        String key = keySetIterator.next();
        System.out.println("key: " + key + " value: " + cities.get(key).getName());
        if (cities.get(key).getName().contains(searchtext)) {
                  System.out.println("Value result found " + cities.get(key).getCountry() + " " + cities.get(key).getPopulation());
        }
}