1. 程式人生 > >JAVA 去除字串的非法字元

JAVA 去除字串的非法字元

方法一:使用正則表示式,只保留常見字元

String wrongString = "sdfsa f,ds。";
String correct = wrongString.replaceAll("[^0-9a-zA-Z]J*","");
匹配結果:

共找到 2 處匹配:


方法二:根據ASCII碼匹配,去掉不合法的ASCII碼

 /**
     * 清除ASCII碼中的換行符等特殊字元
     * @param dirtyString
     * @return
     */
    public static String cleanString(String dirtyString){
        char[] charArray = dirtyString.toCharArray();
        String cleanStr = "";
        for (char charactor:charArray) {
            Integer[] wrongChar={1,2,3,4,5,6,7,8,12,13,14,15,16,17,18,19,20,12,22,23,24,25,26,27,28,29,30,31};
            List<Integer> arr = Arrays.asList(wrongChar);
            Integer thisChar = new Integer(charactor);
            if(arr.contains(thisChar)){//如果包含非法字元,就跳過
                JLogUtils.i("Alex","警告:該字串包含非法ASCII字元"+dirtyString);
                continue;
            }else if(thisChar==10){//換行符處理,把換行符換成\n,修復不同android版本不相容的問題
                cleanStr = cleanStr.concat("\n");
            }else {//正常字元
                cleanStr = cleanStr.concat(String.valueOf(charactor));
            }
        }
        return cleanStr;
    }

提供一個常用正則驗證函式,只允許數字字母和空格

 //判斷是否是數字字母和空格
    public static boolean checkInput(Context context, String str) {
        Pattern p = Pattern.compile("[a-zA-Z0-9\\s]*");
        Matcher m = p.matcher(str);
        if (!m.find()) {          
            return false;
        } else {
            if (m.group(0).length() != str.length()) {               
                return false;
            }
        }
        return true;
    }