在一些系统中经常可能会用到Cookie,但是Cookie的值是不能有特殊字符的,我也是在进过这个坑之后才想起来解决这个问题。另外,在sql中如果插入特殊字符也可能会阻碍sql正常执行,所以特殊字符处理还是有必要的。下面开始贴代码。

【方案一】:直接去掉特殊字符:

public static String replaceSpecialWord(String str) {    
     if (StringUtils.isNotEmpty(str)) {    
         String[] spaArr = { "\\","$","(",")","*","+",".","[", "]","?","^","{","}","|","'","%",",","," };    
         for (String key : spaArr) {    
             if (str.contains(key)) {    
                 str = str.replace(key, "");    
             }    
         }    
     }    
     return str;    
  }

如果还有其他需要过滤的特殊字符,添加到上面的spaArr即可。

【方案二】:仅仅保留中文、英文,以及数字

public static String filterStr(String filterName){
        String regEx1 = "[\\u4e00-\\u9fa5]";
         String regEx2 = "[a-z||A-Z]";
         String regEx3 = "[0-9]";
         String s1 = matchResult(Pattern.compile(regEx1),filterName);
         String s2 = matchResult(Pattern.compile(regEx2),filterName);
         String s3 = matchResult(Pattern.compile(regEx3),filterName);
         String name=s1+s2+s3;
         if(name.isEmpty()){
             name="没有符合要求的字符";//为了不符合中文、英文、数字三种情况出现空的情况,有一个变量通用字符串.
         }
         return name;    
     }

方案二的方式就是只取字符串中的中文、英文以及数字了,并且按照中文+英文+数字的顺序组合。如果想按照其他顺序,修改s1+s2+s3的组合顺序即可。

搞定了。

【备注】:方案一中需要引用StringUtils包,自己引即可。方案二中需要引入java.util.regex.Pattern包。