我一直在努力让我的小应用程序只打印一个hashmap中的特定键(其中不包含'不需要的'字符串)。我尝试这种方式的方式如下所示:
Map<String, Integer> items = new HashMap<String, Integer>();
String[] unwanted = {"hi", "oat"};
items.put("black shoes", 1);
items.put("light coat", 10);
items.put("white shoes", 40);
items.put("dark coat", 90);
for(int i = 0; i < unwanted.length; i++) {
for(Entry<String,Integer> entry : items.entrySet()) {
if(!entry.getKey().contains(unwanted[i])) {
System.out.println(entry.getKey() + " = " + entry.getValue());
}
}
}
然而它印刷了这个:
dark coat = 90
black shoes = 1
light coat = 10
white shoes = 40
black shoes = 1
然而,它意味着打印它(因为它应该省略其中的“hi”和“oat”的键,它们应该离开:)
black shoes = 1
我不知道为什么我没有看到错误,但希望有人可以帮我指出。
答案 0 :(得分:2)
您的内循环逻辑不正确。只要一个不需要的字符串不存在,它就会打印一个hashmap条目。
将for循环逻辑更改为如下所示...
bool found = false;
for(Entry<String,Integer> entry : items.entrySet()) {
found = false;
for(int i = 0; i < unwanted.length; i++) {
if(entry.getKey().contains(unwanted[i])) {
found = true;
}
}
if(found == false)
System.out.println(entry.getKey() + " = " + entry.getValue());
}
答案 1 :(得分:1)
如果你看到你的外圈:
for(int i = 0; i < unwanted.length; i++)
然后它通过
进行迭代String[] unwanted = {"hi", "oat"};
您的地图如下:
"dark coat" : 90
"white shoes": 40
"light coat" : 10
"black shoes", 1
因此,在第一次迭代中,
unwanted[i]="hi"
所以你的内圈不打印“白鞋”,而是打印出来:
dark coat = 90
black shoes = 1
light coat = 10
因为它们不包含“hi”
在第二次交互中,
unwanted[i]="oat"
因此,您的内部循环不会打印"dark coat"
和"light coat"
并打印地图中剩余的内容:
white shoes = 40
black shoes = 1
因此,您将获得上述两次迭代的组合输出:
dark coat = 90
black shoes = 1
light coat = 10
white shoes = 40
black shoes = 1
所以你可以做的就是尝试这个代码,其中内部循环和外部循环被翻转:
Map<String, Integer> items = new HashMap<String, Integer>();
String[] unwanted = {"hi", "oat"};
items.put("black shoes", 1);
items.put("light coat", 10);
items.put("white shoes", 40);
items.put("dark coat", 90);
boolean flag;
for(Map.Entry<String,Integer> entry : items.entrySet()) {
if(!stringContainsItemFromList(entry.getKey(),unwanted))
System.out.println(entry.getKey() + " = " + entry.getValue());
}
在上面的代码中,我们使用了静态函数:
public static boolean stringContainsItemFromList(String inputString, String[] items)
{
for(int i =0; i < items.length; i++)
{
if(inputString.contains(items[i]))
{
return true;
}
}
return false;
}
希望有所帮助!!
答案 2 :(得分:0)
这个想法是首先通过map
、entrySet
通过条目列表,在iterate
迭代中获取ith
条目中的所有条目然后打印它的值
ith