使用switch时,踩到的小坑——NullPointer空指针

我在使用switch case时,碰到这样的场景:

for (int i = 0; i < nodes.size(); i++) {
			String chinese = nodes.get(i);
			switch (PinYinUtil.getFirstSpell(chinese)) {
			case "a":
				aNodes.add(chinese);
				break;
				//......
				default:
				others.add(chinese);
				break;
			}

这里是根据字符串拼音首字母来实现相应分类,而在我处理拼音的内容里是这样的:

/**获取汉字串拼音首字母(第一个字母的首字母),英文字符不变  
	 *   
	 * **/
	 public static String getFirstSpell(String chinese) {   
         try {
			StringBuffer pybf = new StringBuffer();   
			 char[] arr = chinese.toCharArray();   
			 HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();   
			 defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);   
			 defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); 
			 if(arr.length >0){
				 String[] temp = PinyinHelper.toHanyuPinyinStringArray(arr[0], defaultFormat);   
			     if (temp != null) {   
			             pybf.append(temp[0].charAt(0));   
			     }  
			 }
			 return pybf.toString().replaceAll("\\W", "").trim();
		} catch (Exception e) {
			e.printStackTrace();
		}  
        return null;
     }   

可以看到,在处理过程中,针对字符串的首字母——如果是汉字那么返回其相应的首拼音,否则返回null。
万恶之源就出在了这里,switch中的判断是不会将null归于拼音字母之外的default里,反而会给你报一个空指针异常!
所以应该将PinYinUtil里的非拼音返回限定为固定字符串内容,如:

public static String getFirstSpell(String chinese) {   
         /*内容不变*/
        return "Other";
     }   

吃一堑长一智

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值