2015-03-30 66 views
-2

我在打印选定的地图值时遇到的问题是NullPointerException。如果selectedCert列表包含(AABBCC),地图上会打印:如何在地图中处理空值

EN
EN
EN

但是,如果selectedCert列表只包含2个是(AA,BB),会出现空指针异常,因为ccLang为空。

剪断代码:

private String ccLang;//Setter and Getter  
    Map<String, String> Cert = new HashMap<String,String>(ss.size()); 

    Cert.put("AA", "EN");  
    Cert.put("BB", "EN");  
    Cert.put("CC", ccLang); 

    for(String key: selectedCert)  
     System.out.println(Cert.get(key));  
    System.out.println(); 

如何解决这个问题?

+0

在调用“put”之前做空检查,是你在找什么R' – kosa 2015-03-30 19:30:35

+0

'NullPointerException'来自哪里?一个'HashMap'允许有'null'键和值。 – 2015-03-30 19:35:02

+0

你可以请验证你的代码?你发布的那个不会被编译,如果“固定”你不会得到一个NPE,它只会打印null ... – migueldiab 2015-03-30 19:35:43

回答

0

如果你的值可以为null,只需添加一个空检查:

if(value != null) { 
    map.put(key, value); 
} 

可以使用的方法为它:

private static void putNonNull(String key, String value, 
           Map<String, String> map) { 
    if(value != null) { 
     map.put(key, value); 
    } 
} 

putNonNull("AA", "EN", Cert); 
putNonNull("BB", "EN", Cert); 
putNonNull("CC", ccLang, Cert); 
+0

谢谢,我试过你的方式,但它仍然显示空指针异常。 ccLang变量的初始值是“”(两行情=空白) – Learner30 2015-03-30 19:47:04

0

我编辑的代码位,看看这个是你在说什么,但这会很好:

String ccLang = null;//Setter and Getter 

    Map<String, String> Cert = new HashMap<String,String>(10); 

    Cert.put("AA", "EN"); 

    Cert.put("BB", "EN"); 

    Cert.put("CC", ccLang); 

    for (Entry<String, String> entry : Cert.entrySet()) { 
     System.out.println(entry.getKey()); 
     System.out.println(entry.getValue()); 
    } 
+0

感谢您的帮助 – Learner30 2015-03-30 19:53:40