package com.doumee.lib_coremodel.util; 
 | 
  
 | 
import android.text.TextUtils; 
 | 
  
 | 
import org.json.JSONException; 
 | 
import org.json.JSONObject; 
 | 
  
 | 
import java.security.NoSuchAlgorithmException; 
 | 
import java.text.DecimalFormat; 
 | 
import java.text.ParseException; 
 | 
import java.text.SimpleDateFormat; 
 | 
import java.util.Date; 
 | 
import java.util.HashMap; 
 | 
import java.util.Iterator; 
 | 
import java.util.Map; 
 | 
import java.util.Random; 
 | 
import java.util.Set; 
 | 
import java.util.UUID; 
 | 
import java.util.regex.Matcher; 
 | 
import java.util.regex.Pattern; 
 | 
  
 | 
import javax.crypto.Cipher; 
 | 
import javax.crypto.Mac; 
 | 
import javax.crypto.spec.IvParameterSpec; 
 | 
import javax.crypto.spec.SecretKeySpec; 
 | 
  
 | 
  
 | 
/** 
 | 
 * 字符串操作工具包 
 | 
 */ 
 | 
public class StringUtil { 
 | 
    public final static String EMPTY=""; 
 | 
    private final static Pattern emailer = Pattern.compile("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*"); 
 | 
    private final static Pattern identityCard = Pattern.compile("(\\d{14}[0-9xX])|(\\d{17}[0-9xX])"); 
 | 
    private final static Pattern passer = Pattern.compile("[A-Za-z0-9@._-]{6,20}"); 
 | 
    private final static Pattern pureNumber = Pattern.compile("[0-9]{8,30}"); 
 | 
    private final static Pattern phoner = Pattern.compile("1[0-9]{10}"); 
 | 
    private final static Pattern bankCarder = Pattern.compile("[0-9]{16}|[0-9]{19}"); 
 | 
    private final static Pattern user = Pattern.compile("[A-Za-z0-9@._-]{6,20}"); 
 | 
    private final static Pattern Age = Pattern.compile("[0-9]*"); 
 | 
  
 | 
    private final static Pattern Chinese = Pattern.compile("^[\u4e00-\u9fa5]*$"); 
 | 
    private final static Pattern English = Pattern.compile("^[A-Za-z]+$"); 
 | 
  
 | 
    private final static Pattern LinkMan = Pattern.compile("^([A-Za-z]+)$|^([\u4e00-\u9fa5]{2,4})$"); 
 | 
    private final static Pattern LoanAmt = Pattern.compile("\\d{1,10}"); 
 | 
    private final static Pattern LoanExpiry = Pattern.compile("^\\d{1,2}$"); 
 | 
    private final static Pattern BizLicense = Pattern.compile("(?!^[a-zA-Z]+$)[0-9a-zA-Z]+"); 
 | 
    private final static Pattern LoanMoney = Pattern.compile("^(\\d{1,10})(\\.\\d{1,2})?$"); 
 | 
  
 | 
    private final static Pattern HouseSize = Pattern.compile("^(\\d{1,4})(\\.\\d{1,2})?$"); 
 | 
    private final static Pattern ZonuleName = Pattern.compile("[A-Za-z0-9\u4e00-\u9fa5]+"); 
 | 
  
 | 
    private final static Pattern Color = Pattern.compile("[A-Za-z\u4e00-\u9fa5]+"); 
 | 
  
 | 
    private final static Pattern PaiLiang = Pattern.compile("^(\\d{1,2})(\\.\\d{1,2})?$"); 
 | 
    private final static Pattern CarMileage = Pattern.compile("^(\\d{1,8})(\\.\\d{1,2})?$"); 
 | 
  
 | 
    private final static Pattern Money = Pattern.compile("^(\\d{1,8})(\\.\\d{1,2})?$"); 
 | 
  
 | 
    /** 
 | 
     * 判断给定字符串是否空白串。 
 | 
     * 空白串是指由空格、制表符、回车符、换行符组成的字符串 
 | 
     * 若输入字符串为null或空字符串,返回true 
 | 
     * 
 | 
     * @param input 
 | 
     * @return boolean 
 | 
     */ 
 | 
    public static boolean isEmpty(String input) { 
 | 
  
 | 
        if (input == null || "".equals(input)) { 
 | 
            return true; 
 | 
        } 
 | 
  
 | 
        for (int i = 0; i < input.length(); i++) { 
 | 
            char c = input.charAt(i); 
 | 
            if (c != ' ' && c != '\t' && c != '\r' && c != '\n') { 
 | 
                return false; 
 | 
            } 
 | 
        } 
 | 
        return true; 
 | 
  
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 判断是不是一个合法的身份证号 
 | 
     * 
 | 
     * @param card 
 | 
     * @return 
 | 
     */ 
 | 
    public static boolean isIdentityCard(String card) { 
 | 
  
 | 
        if (card == null || "".equals(card)) 
 | 
            return false; 
 | 
        return identityCard.matcher(card).matches(); 
 | 
  
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 判断是不是一个合法的电子邮件地址 
 | 
     * 
 | 
     * @param email 
 | 
     * @return 
 | 
     */ 
 | 
    public static boolean isEmail(String email) { 
 | 
        if (TextUtils.isEmpty(email)) 
 | 
            return false; 
 | 
        return emailer.matcher(email).matches(); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 判断是不是一个合法的用户密码 
 | 
     * 
 | 
     * @return 
 | 
     */ 
 | 
    public static boolean isPassword(String password) { 
 | 
        if (TextUtils.isEmpty(password)) 
 | 
            return false; 
 | 
        return passer.matcher(password).matches(); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 判断是不是一个合法的用户名 
 | 
     * 
 | 
     * @param custName 
 | 
     * @return true为合法的用户名 
 | 
     */ 
 | 
    public static boolean isUser(String custName) { 
 | 
  
 | 
        if (custName == null || "".equals(custName)) { 
 | 
            return false; 
 | 
        } 
 | 
        return user.matcher(custName).matches(); 
 | 
  
 | 
    } 
 | 
  
 | 
    public static boolean ispureNumber(String custName) { 
 | 
        return pureNumber.matcher(custName).matches(); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 判断是不是一个合法的年龄 
 | 
     * 
 | 
     * @param age 
 | 
     * @return 
 | 
     */ 
 | 
    public static boolean isAge(String age) { 
 | 
        return Age.matcher(age).matches(); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 这个方法只支持最大长度为32的随机字符串,如要支持更大长度的,可以适当修改此方法,如前面补、后面补,或者多个uuid相连接 
 | 
     * @param length 
 | 
     * @return 
 | 
     */ 
 | 
    public static String toFixedLengthStringByUUID(int length) { 
 | 
  
 | 
        //也可以通过UUID来随机生成 
 | 
        UUID uuid = UUID.randomUUID(); 
 | 
        return uuid.toString().replace("-", "").substring(0, length); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 判断是不是一个合法的手机号码 
 | 
     */ 
 | 
    public static boolean isPhone(String phone) { 
 | 
        if (TextUtils.isEmpty(phone)) 
 | 
            return false; 
 | 
        return phoner.matcher(phone).matches(); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 判断是不是一个合法的银行卡号 
 | 
     * 
 | 
     * @return 
 | 
     */ 
 | 
    public static boolean isBankCard(String cardNum) { 
 | 
        if (cardNum == null || "".equals(cardNum)) 
 | 
            return false; 
 | 
        return bankCarder.matcher(cardNum).matches(); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 数字类型的金额格式化成字符串 
 | 
     */ 
 | 
    public static String toMoney(Double obj) { 
 | 
        if (obj == null) { 
 | 
            return "0.00"; 
 | 
        } 
 | 
        DecimalFormat df = new DecimalFormat("#,#0.00"); 
 | 
        return df.format(obj); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 数字格式化,保留两位小数 
 | 
     * 
 | 
     * @param obj 
 | 
     * @return 
 | 
     */ 
 | 
    public static String douFormat(double obj) { 
 | 
        DecimalFormat df = new DecimalFormat("0.00"); 
 | 
        return df.format(obj); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取输入的字符长度,汉字为两个字符 
 | 
     * 
 | 
     * @param value 
 | 
     * @return 
 | 
     */ 
 | 
    public static int stringLength(String value) { 
 | 
        int valueLength = 0; 
 | 
        String chinese = "[\u4e00-\u9fa5]"; 
 | 
        for (int i = 0; i < value.length(); i++) { 
 | 
            String temp = value.substring(i, i + 1); 
 | 
            if (temp.matches(chinese)) { 
 | 
                valueLength += 2; 
 | 
            } else { 
 | 
                valueLength += 1; 
 | 
            } 
 | 
        } 
 | 
        return valueLength; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 将字符串转化为double类型 
 | 
     * 
 | 
     * @param value 
 | 
     * @return 
 | 
     */ 
 | 
    public static double StringToDouble(String value) { 
 | 
        try { 
 | 
            if (value == null || "".equals(value)) 
 | 
                return 0.00; 
 | 
            return Double.parseDouble(value); 
 | 
        }catch (NumberFormatException e){ 
 | 
            return 0; 
 | 
        } 
 | 
  
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 字符串转整数 
 | 
     * 
 | 
     * @param str 
 | 
     * @return 
 | 
     */ 
 | 
    public static int StringToInt(String str) { 
 | 
        try { 
 | 
            return Integer.parseInt(str); 
 | 
        } catch (Exception e) { 
 | 
        } 
 | 
        return 0; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 字符串转long 
 | 
     * 
 | 
     * @param str 
 | 
     * @return 
 | 
     */ 
 | 
    public static long StringToLong(String str) { 
 | 
        try { 
 | 
            return Long.parseLong(str); 
 | 
        } catch (Exception e) { 
 | 
        } 
 | 
        return 0; 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 判断字符串是否是中文字符 
 | 
     * 
 | 
     * @return boolean false 字符串含有其他非中文字符  true 字符串都是中文字符串 
 | 
     */ 
 | 
    public static boolean isChinese(String str) { 
 | 
  
 | 
        if (null == str || "".equals(str.trim())) { 
 | 
            return false; 
 | 
        } 
 | 
  
 | 
        for (int i = 0; i < str.length(); i++) { 
 | 
  
 | 
            if (!isChinese(str.charAt(i))) { 
 | 
                return false; 
 | 
            } 
 | 
  
 | 
        } 
 | 
  
 | 
        return true; 
 | 
  
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 判断字符是否是中文字符 
 | 
     * 
 | 
     * @return boolean false  字符不是中文字符  true 字符是中文字符 
 | 
     */ 
 | 
    public static boolean isChinese(char c) { 
 | 
  
 | 
        int v = (int) c; 
 | 
        return (v >= 19968 && v < 171941); 
 | 
  
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 中文汉字 
 | 
     * 
 | 
     * @param str 
 | 
     * @return 
 | 
     */ 
 | 
    public static boolean isC(String str) { 
 | 
  
 | 
        if (null == str || "".equals(str.trim())) { 
 | 
            return false; 
 | 
        } 
 | 
        return Chinese.matcher(str).matches(); 
 | 
  
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 英文 
 | 
     * 
 | 
     * @param str 
 | 
     * @return 
 | 
     */ 
 | 
    public static boolean isEnglish(String str) { 
 | 
  
 | 
        if (null == str || "".equals(str.trim())) { 
 | 
            return false; 
 | 
        } 
 | 
        return English.matcher(str).matches(); 
 | 
  
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 金额 
 | 
     * 
 | 
     * @param str 
 | 
     * @return 
 | 
     */ 
 | 
    public static boolean isMoney(String str) { 
 | 
  
 | 
        if (null == str || "".equals(str.trim())) { 
 | 
            return false; 
 | 
        } 
 | 
        return Money.matcher(str).matches(); 
 | 
  
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 判断名字是否含有英文特殊字符(功能应未完善,应该包含中文特殊字符) 
 | 
     * 
 | 
     * @return boolean false 名字不合法,含有英文特殊字符     true 名字合法 ,不含有英文特殊字符 
 | 
     */ 
 | 
    public static boolean isNameLegal(String str) { 
 | 
  
 | 
        String temp = "@_\\_|_~_`_!_#_$_%_^_&_*_(_)_{_}_[_]_;_:_'_\"_,_<_._>_/_?_-_¥_!_ @_#_¥_%_&_*_(_)_——_+_?_~_·_;_:|、_{_}_【_】_1_2_3_4_5_6_7_8_9_0_“_”_…_、_:_《_》_℃_€_£_=_÷_,_。"; 
 | 
        String[] strs = temp.split("_"); 
 | 
  
 | 
        for (int i = 0; i < strs.length; i++) { 
 | 
  
 | 
            if (str.contains(strs[i])) { 
 | 
                return false; 
 | 
            } 
 | 
  
 | 
        } 
 | 
        return true; 
 | 
  
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 判断是否符合联系人格式 
 | 
     * 
 | 
     * @param str 
 | 
     * @return 
 | 
     */ 
 | 
    public static boolean isLinkMan(String str) { 
 | 
  
 | 
        if (null == str || "".equals(str.trim())) { 
 | 
            return false; 
 | 
        } 
 | 
        return LinkMan.matcher(str).matches(); 
 | 
  
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 融资金额 
 | 
     * 
 | 
     * @param str 
 | 
     * @return 
 | 
     */ 
 | 
    public static boolean isLoanAmt(String str) { 
 | 
  
 | 
        if (TextUtils.isEmpty(str)) { 
 | 
            return false; 
 | 
        } 
 | 
        return LoanAmt.matcher(str).matches(); 
 | 
  
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 贷款期限 
 | 
     * 
 | 
     * @param str 
 | 
     * @return 
 | 
     */ 
 | 
    public static boolean isLoanExpiry(String str) { 
 | 
  
 | 
        if (null == str || "".equals(str.trim())) { 
 | 
            return false; 
 | 
        } 
 | 
        return LoanExpiry.matcher(str).matches(); 
 | 
  
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 营业执照 
 | 
     * 
 | 
     * @param str 
 | 
     * @return 
 | 
     */ 
 | 
    public static boolean isBizLicense(String str) { 
 | 
  
 | 
        if (null == str || "".equals(str.trim())) { 
 | 
            return false; 
 | 
        } 
 | 
        return BizLicense.matcher(str).matches(); 
 | 
  
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 资金 
 | 
     * 
 | 
     * @param str 
 | 
     * @return 
 | 
     */ 
 | 
    public static boolean isLoanMoney(String str) { 
 | 
  
 | 
        if (null == str || "".equals(str.trim())) { 
 | 
            return false; 
 | 
        } 
 | 
        return LoanMoney.matcher(str).matches(); 
 | 
  
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 房屋面积 
 | 
     * 
 | 
     * @param str 
 | 
     * @return 
 | 
     */ 
 | 
    public static boolean isHouseSize(String str) { 
 | 
  
 | 
        if (null == str || "".equals(str.trim())) { 
 | 
            return false; 
 | 
        } 
 | 
        return HouseSize.matcher(str).matches(); 
 | 
    } 
 | 
  
 | 
    public static String cutOffCardNum(String id) { 
 | 
        if (id.length() == 18) { 
 | 
            return new StringBuilder().append(id.substring(0, 3)).append("****").append(id.substring(14, 18)).toString(); 
 | 
        } else if (id.length() == 15) { 
 | 
            return new StringBuilder().append(id.substring(0, 3)).append("****").append(id.substring(11, 15)).toString(); 
 | 
        } else { 
 | 
            return id; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public static String cutOffPhone(String phone) { 
 | 
        if (isPhone(phone)) { 
 | 
            return new StringBuilder().append(phone.substring(0, 3)).append("****").append(phone.substring(8, 11)).toString(); 
 | 
        } else { 
 | 
            return phone; 
 | 
        } 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 小区名称 
 | 
     * 
 | 
     * @param str 
 | 
     * @return 
 | 
     */ 
 | 
    public static boolean isZonuleName(String str) { 
 | 
  
 | 
        if (null == str || "".equals(str.trim())) { 
 | 
            return false; 
 | 
        } 
 | 
        return ZonuleName.matcher(str).matches(); 
 | 
  
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 排量 
 | 
     * 
 | 
     * @param str 
 | 
     * @return 
 | 
     */ 
 | 
    public static boolean isPaiLiang(String str) { 
 | 
  
 | 
        if (null == str || "".equals(str.trim())) { 
 | 
            return false; 
 | 
        } 
 | 
        return PaiLiang.matcher(str).matches(); 
 | 
  
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 汽车颜色 
 | 
     * 
 | 
     * @param str 
 | 
     * @return 
 | 
     */ 
 | 
    public static boolean isColor(String str) { 
 | 
  
 | 
        if (null == str || "".equals(str.trim())) { 
 | 
            return false; 
 | 
        } 
 | 
        return Color.matcher(str).matches(); 
 | 
  
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 汽车里程 
 | 
     * 
 | 
     * @param str 
 | 
     * @return 
 | 
     */ 
 | 
    public static boolean isCarMileage(String str) { 
 | 
  
 | 
        if (null == str || "".equals(str.trim())) { 
 | 
            return false; 
 | 
        } 
 | 
        return CarMileage.matcher(str).matches(); 
 | 
    } 
 | 
  
 | 
  
 | 
    public static String replaceEach(final String text, final String[] searchList, final String[] replacementList) { 
 | 
        return replaceEach(text, searchList, replacementList, false, 0); 
 | 
    } 
 | 
  
 | 
    public static String dateFormat(String date){ 
 | 
        if(TextUtils.isEmpty(date)){ 
 | 
            return ""; 
 | 
        } 
 | 
        return date.substring(0,4)+"-"+date.substring(4,6)+"-"+date.substring(6,8)+" "+date.substring(8,10)+":"+date.substring(10,12)+":"+date.substring(12); 
 | 
    } 
 | 
  
 | 
    public static String simpleDateFormat(String date){ 
 | 
        if(date==null){ 
 | 
            return ""; 
 | 
        } 
 | 
        return date.substring(0,4)+"-"+date.substring(4,6)+"-"+date.substring(6,8); 
 | 
    } 
 | 
  
 | 
    public static String timeToString(long time){ 
 | 
        SimpleDateFormat format =  new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
 | 
        String d = format.format(new Date(time)); 
 | 
        return d; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * <p> 
 | 
     * Replaces all occurrences of Strings within another String. 
 | 
     * </p> 
 | 
     * <p/> 
 | 
     * <p> 
 | 
     * A {@code null} reference passed to this method is a no-op, or if 
 | 
     * any "search string" or "string to replace" is null, that replace will be 
 | 
     * ignored. 
 | 
     * </p> 
 | 
     * <p/> 
 | 
     * <pre> 
 | 
     *  StringUtils.replaceEachRepeatedly(null, *, *) = null 
 | 
     *  StringUtils.replaceEachRepeatedly("", *, *) = "" 
 | 
     *  StringUtils.replaceEachRepeatedly("aba", null, null) = "aba" 
 | 
     *  StringUtils.replaceEachRepeatedly("aba", new String[0], null) = "aba" 
 | 
     *  StringUtils.replaceEachRepeatedly("aba", null, new String[0]) = "aba" 
 | 
     *  StringUtils.replaceEachRepeatedly("aba", new String[]{"a"}, null) = "aba" 
 | 
     *  StringUtils.replaceEachRepeatedly("aba", new String[]{"a"}, new String[]{""}) = "b" 
 | 
     *  StringUtils.replaceEachRepeatedly("aba", new String[]{null}, new String[]{"a"}) = "aba" 
 | 
     *  StringUtils.replaceEachRepeatedly("abcde", new String[]{"ab", "d"}, new String[]{"w", "t"}) = "wcte" 
 | 
     *  (example of how it repeats) 
 | 
     *  StringUtils.replaceEachRepeatedly("abcde", new String[]{"ab", "d"}, new String[]{"d", "t"}) = "tcte" 
 | 
     *  StringUtils.replaceEachRepeatedly("abcde", new String[]{"ab", "d"}, new String[]{"d", "ab"}) = IllegalStateException 
 | 
     * </pre> 
 | 
     * 
 | 
     * @param text            text to search and replace in, no-op if null 
 | 
     * @param searchList      the Strings to search for, no-op if null 
 | 
     * @param replacementList the Strings to replace them with, no-op if null 
 | 
     * @return the text with any replacements processed, {@code null} if 
 | 
     * null String input 
 | 
     * @throws IllegalStateException    if the search is repeating and there is an endless loop due 
 | 
     *                                  to outputs of one being inputs to another 
 | 
     * @throws IllegalArgumentException if the lengths of the arrays are not the same (null is ok, 
 | 
     *                                  and/or size 0) 
 | 
     * @since 2.4 
 | 
     */ 
 | 
    public static String replaceEach( 
 | 
            final String text, final String[] searchList, final String[] replacementList, final boolean repeat, final int timeToLive) { 
 | 
  
 | 
        // mchyzer Performance note: This creates very few new objects (one major goal) 
 | 
        // let me know if there are performance requests, we can create a harness to measure 
 | 
  
 | 
        if (text == null || text.isEmpty() || searchList == null || 
 | 
                searchList.length == 0 || replacementList == null || replacementList.length == 0) { 
 | 
            return text; 
 | 
        } 
 | 
  
 | 
        // if recursing, this shouldn't be less than 0 
 | 
        if (timeToLive < 0) { 
 | 
            throw new IllegalStateException("Aborting to protect against StackOverflowError - " + 
 | 
                    "output of one loop is the input of another"); 
 | 
        } 
 | 
  
 | 
        final int searchLength = searchList.length; 
 | 
        final int replacementLength = replacementList.length; 
 | 
  
 | 
        // make sure lengths are ok, these need to be equal 
 | 
        if (searchLength != replacementLength) { 
 | 
            throw new IllegalArgumentException("Search and Replace array lengths don't match: " 
 | 
                    + searchLength 
 | 
                    + " vs " 
 | 
                    + replacementLength); 
 | 
        } 
 | 
  
 | 
        // keep track of which still have matches 
 | 
        final boolean[] noMoreMatchesForReplIndex = new boolean[searchLength]; 
 | 
  
 | 
        // index on index that the match was found 
 | 
        int textIndex = -1; 
 | 
        int replaceIndex = -1; 
 | 
        int tempIndex = -1; 
 | 
  
 | 
        // index of replace array that will replace the search string found 
 | 
        // NOTE: logic duplicated below START 
 | 
        for (int i = 0; i < searchLength; i++) { 
 | 
            if (noMoreMatchesForReplIndex[i] || searchList[i] == null || 
 | 
                    searchList[i].isEmpty() || replacementList[i] == null) { 
 | 
                continue; 
 | 
            } 
 | 
            tempIndex = text.indexOf(searchList[i]); 
 | 
  
 | 
            // see if we need to keep searching for this 
 | 
            if (tempIndex == -1) { 
 | 
                noMoreMatchesForReplIndex[i] = true; 
 | 
            } else { 
 | 
                if (textIndex == -1 || tempIndex < textIndex) { 
 | 
                    textIndex = tempIndex; 
 | 
                    replaceIndex = i; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        // NOTE: logic mostly below END 
 | 
  
 | 
        // no search strings found, we are done 
 | 
        if (textIndex == -1) { 
 | 
            return text; 
 | 
        } 
 | 
  
 | 
        int start = 0; 
 | 
  
 | 
        // get a good guess on the size of the result buffer so it doesn't have to double if it goes over a bit 
 | 
        int increase = 0; 
 | 
  
 | 
        // count the replacement text elements that are larger than their corresponding text being replaced 
 | 
        for (int i = 0; i < searchList.length; i++) { 
 | 
            if (searchList[i] == null || replacementList[i] == null) { 
 | 
                continue; 
 | 
            } 
 | 
            final int greater = replacementList[i].length() - searchList[i].length(); 
 | 
            if (greater > 0) { 
 | 
                increase += 3 * greater; // assume 3 matches 
 | 
            } 
 | 
        } 
 | 
        // have upper-bound at 20% increase, then let Java take over 
 | 
        increase = Math.min(increase, text.length() / 5); 
 | 
  
 | 
        final StringBuilder buf = new StringBuilder(text.length() + increase); 
 | 
  
 | 
        while (textIndex != -1) { 
 | 
  
 | 
            for (int i = start; i < textIndex; i++) { 
 | 
                buf.append(text.charAt(i)); 
 | 
            } 
 | 
            buf.append(replacementList[replaceIndex]); 
 | 
  
 | 
            start = textIndex + searchList[replaceIndex].length(); 
 | 
  
 | 
            textIndex = -1; 
 | 
            replaceIndex = -1; 
 | 
            tempIndex = -1; 
 | 
            // find the next earliest match 
 | 
            // NOTE: logic mostly duplicated above START 
 | 
            for (int i = 0; i < searchLength; i++) { 
 | 
                if (noMoreMatchesForReplIndex[i] || searchList[i] == null || 
 | 
                        searchList[i].isEmpty() || replacementList[i] == null) { 
 | 
                    continue; 
 | 
                } 
 | 
                tempIndex = text.indexOf(searchList[i], start); 
 | 
  
 | 
                // see if we need to keep searching for this 
 | 
                if (tempIndex == -1) { 
 | 
                    noMoreMatchesForReplIndex[i] = true; 
 | 
                } else { 
 | 
                    if (textIndex == -1 || tempIndex < textIndex) { 
 | 
                        textIndex = tempIndex; 
 | 
                        replaceIndex = i; 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
            // NOTE: logic duplicated above END 
 | 
  
 | 
        } 
 | 
        final int textLength = text.length(); 
 | 
        for (int i = start; i < textLength; i++) { 
 | 
            buf.append(text.charAt(i)); 
 | 
        } 
 | 
        final String result = buf.toString(); 
 | 
        if (!repeat) { 
 | 
            return result; 
 | 
        } 
 | 
  
 | 
        return replaceEach(result, searchList, replacementList, repeat, timeToLive - 1); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 半角转全角 * @param 
 | 
     input String. * @return 
 | 
     全角字符串. */ 
 | 
    public static String toSBC(String input) { 
 | 
        char c[] = input.toCharArray(); 
 | 
        for (int i = 0; i < c.length; i++) { 
 | 
            if(c[i] == ' ') { 
 | 
                c[i] = '\u3000'; 
 | 
            }else if(c[i] < '\177') { 
 | 
                c[i] = (char) (c[i] + 65248); 
 | 
            } 
 | 
        } 
 | 
        return new String(c); 
 | 
    } 
 | 
  
 | 
    public static String hashToStr(HashMap<String, Object> map){ 
 | 
        JSONObject clientKey = new JSONObject(); 
 | 
        //  将map中的key-value关系存入到set集合中,再使用Map.Entry 
 | 
        Set entrySet = map.entrySet(); // key-value的set集合 
 | 
        Iterator it2 = entrySet.iterator(); 
 | 
        while(it2.hasNext()){ 
 | 
            Map.Entry me = (Map.Entry) it2.next(); 
 | 
            Object k = me.getKey(); 
 | 
            Object v = me.getValue(); 
 | 
            try { 
 | 
                clientKey.put((String)k,v); 
 | 
            } catch (JSONException e) { 
 | 
                e.printStackTrace(); 
 | 
            } 
 | 
        } 
 | 
        return String.valueOf(clientKey); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 秒转为分钟小时 
 | 
     * @return 
 | 
     *//* 
 | 
    public static String sToMH(int s) { 
 | 
        int h=0; 
 | 
        int m=0; 
 | 
        StringBuilder builder=new StringBuilder(); 
 | 
        if(s/3600>0){ 
 | 
            h=s/3600; 
 | 
            builder.append(h+MApplication.mContext.getResources().getString(R.string.time_h)); 
 | 
            s-=3600*h; 
 | 
        } 
 | 
        if(s/60>0){ 
 | 
            m=s/60; 
 | 
            builder.append(m+MApplication.mContext.getResources().getString(R.string.time_m)); 
 | 
            s-=m*60; 
 | 
        }else { 
 | 
            if(h!=0){ 
 | 
                builder.append(0+MApplication.mContext.getResources().getString(R.string.time_m)); 
 | 
            } 
 | 
        } 
 | 
        builder.append(s+ MApplication.mContext.getResources().getString(R.string.time_s)); 
 | 
        return builder.toString(); 
 | 
    }*/ 
 | 
  
 | 
    /** 
 | 
     * 影藏手机中间4位 
 | 
     * @return 
 | 
     */ 
 | 
    public static String phoneToHind(String s) { 
 | 
        if(s==null){ 
 | 
            return ""; 
 | 
        } 
 | 
        if(s.length()==11){ 
 | 
            s=s.substring(0,3)+"****"+s.substring(7); 
 | 
        } 
 | 
        return s; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 影藏银行卡号码,保留后4位 
 | 
     * @return 
 | 
     */ 
 | 
    public static String bankNumToHind(String s) { 
 | 
        if(s==null){ 
 | 
            return ""; 
 | 
        } 
 | 
        if(s.length()>4){ 
 | 
            int size=s.length(); 
 | 
            String s1=s.substring(size-4); 
 | 
            StringBuffer buffer=new StringBuffer(); 
 | 
            for(int i=0;i<size-4;i++){ 
 | 
                buffer.append("*"); 
 | 
            } 
 | 
            s=buffer.toString()+s1; 
 | 
        } 
 | 
        return s; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * SHA加密 
 | 
     * @return 加密之后的密文 
 | 
     */ 
 | 
    public static String shaEncrypt(String data) { 
 | 
        byte[] datas=data.getBytes(); 
 | 
        String result = null; 
 | 
        try { 
 | 
            //根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称 
 | 
            SecretKeySpec signinKey = new SecretKeySpec("Gu5t9xGARNpq86cd98joQYCN3Cozk1qA".getBytes(), "HmacSHA1"); 
 | 
            //生成一个指定 Mac 算法 的 Mac 对象 
 | 
            Mac mac = Mac.getInstance("HmacSHA1"); 
 | 
            //用给定密钥初始化 Mac 对象 
 | 
            mac.init(signinKey); 
 | 
            //完成 Mac 操作 
 | 
            byte[] rawHmac = mac.doFinal(datas); 
 | 
            result = new String(); 
 | 
        } catch (NoSuchAlgorithmException e) { 
 | 
            System.err.println(e.getMessage()); 
 | 
        } catch (Exception e) { 
 | 
            System.err.println(e.getMessage()); 
 | 
        } 
 | 
        if (null != result) { 
 | 
            return result; 
 | 
        } else { 
 | 
            return null; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * byte数组转换为16进制字符串 
 | 
     * 
 | 
     * @param bts 
 | 
     *            数据源 
 | 
     * @return 16进制字符串 
 | 
     */ 
 | 
    public static String bytes2Hex(byte[] bts) { 
 | 
        String des = ""; 
 | 
        String tmp = null; 
 | 
        for (int i = 0; i < bts.length; i++) { 
 | 
            tmp = (Integer.toHexString(bts[i] & 0xFF)); 
 | 
            if (tmp.length() == 1) { 
 | 
                des += "0"; 
 | 
            } 
 | 
            des += tmp; 
 | 
        } 
 | 
        return des; 
 | 
    } 
 | 
  
 | 
    // 加密 
 | 
    public static String encrypt(String sSrc){ 
 | 
        String sKey = "abcdef0123456789"; 
 | 
        String ivParameter = "0123456789abcdef"; 
 | 
        String result = ""; 
 | 
        try { 
 | 
            Cipher cipher; 
 | 
            cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 
 | 
            byte[] raw = sKey.getBytes(); 
 | 
            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); 
 | 
            IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());// 使用CBC模式,需要一个向量iv,可增加加密算法的强度 
 | 
            cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv); 
 | 
            byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8")); 
 | 
            result = new String(); 
 | 
        } catch (Exception e) { 
 | 
            e.printStackTrace(); 
 | 
        } 
 | 
        // 此处使用BASE64做转码。 
 | 
        return result; 
 | 
  
 | 
    } 
 | 
  
 | 
    // 解密 
 | 
    public static String decrypt(String sSrc){ 
 | 
        if(sSrc==null){ 
 | 
            return ""; 
 | 
        } 
 | 
        String sKey = "abcdef0123456789"; 
 | 
        String ivParameter = "0123456789abcdef"; 
 | 
        try { 
 | 
            byte[] raw = sKey.getBytes("ASCII"); 
 | 
            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); 
 | 
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 
 | 
            IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes()); 
 | 
            cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv); 
 | 
            byte[] encrypted1 = "".getBytes();// 先用base64解密 
 | 
            byte[] original = cipher.doFinal(encrypted1); 
 | 
            String originalString = new String(original, "utf-8"); 
 | 
            raw=null; 
 | 
            encrypted1=null; 
 | 
            original=null; 
 | 
            return "{\"data\":"+originalString+"}"; 
 | 
        } catch (Exception ex) { 
 | 
            ex.printStackTrace(); 
 | 
            return null; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    // 解密 
 | 
    public static String decryptNew(String sSrc){ 
 | 
        if(sSrc==null){ 
 | 
            return ""; 
 | 
        } 
 | 
        String sKey = "abcdef0123456789"; 
 | 
        String ivParameter = "0123456789abcdef"; 
 | 
        try { 
 | 
            byte[] raw = sKey.getBytes("ASCII"); 
 | 
            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); 
 | 
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 
 | 
            IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes()); 
 | 
            cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv); 
 | 
            byte[] encrypted1 = "".getBytes();// 先用base64解密 
 | 
            byte[] original = cipher.doFinal(encrypted1); 
 | 
            String originalString = new String(original, "utf-8"); 
 | 
            raw=null; 
 | 
            encrypted1=null; 
 | 
            original=null; 
 | 
            return originalString; 
 | 
        } catch (Exception ex) { 
 | 
            ex.printStackTrace(); 
 | 
            return null; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    // 解密 
 | 
    public static String decryptNoData(String sSrc){ 
 | 
        if(sSrc==null){ 
 | 
            return ""; 
 | 
        } 
 | 
        String sKey = "abcdef0123456789"; 
 | 
        String ivParameter = "0123456789abcdef"; 
 | 
        try { 
 | 
            byte[] raw = sKey.getBytes("ASCII"); 
 | 
            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); 
 | 
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 
 | 
            IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes()); 
 | 
            cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv); 
 | 
            byte[] encrypted1 = "".getBytes();// 先用base64解密 
 | 
            byte[] original = cipher.doFinal(encrypted1); 
 | 
            String originalString = new String(original, "utf-8"); 
 | 
            raw=null; 
 | 
            encrypted1=null; 
 | 
            original=null; 
 | 
            return originalString+"}"; 
 | 
        } catch (Exception ex) { 
 | 
            ex.printStackTrace(); 
 | 
            return null; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 
 | 
     * @param str 
 | 
     * @return 
 | 
     * @throws NumberFormatException 
 | 
     */ 
 | 
    public static String inputPriceFormatter(String str)throws NumberFormatException { 
 | 
        String handledStr = null; 
 | 
        //小数形式的输入 
 | 
        if(isValid(str).contains(".")){ 
 | 
            float f_price = Float.valueOf(isValid(str)); 
 | 
            handledStr = Float.toString(f_price); 
 | 
            //整数形式的输入 
 | 
        }else{ 
 | 
            int i_price = Integer.valueOf(isValid(str)); 
 | 
            handledStr = Integer.toString(i_price); 
 | 
        } 
 | 
        return isValid(handledStr); 
 | 
    } 
 | 
    /** 
 | 
     * 判断是否为空和空串,以NumberFormatException的方式集中处理 
 | 
     * @param str 
 | 
     * @return 
 | 
     * @throws NumberFormatException 
 | 
     */ 
 | 
    public static String isValid(String str) throws NumberFormatException { 
 | 
        if(str == null || "".equals(str)) 
 | 
            throw new NumberFormatException(); 
 | 
        return str; 
 | 
    } 
 | 
  
 | 
    // get rand color 
 | 
    public static String getRandColorCode() { 
 | 
        String r,g,b; 
 | 
        Random random = new Random(); 
 | 
        r = Integer.toHexString(random.nextInt(256)).toUpperCase(); 
 | 
        g = Integer.toHexString(random.nextInt(256)).toUpperCase(); 
 | 
        b = Integer.toHexString(random.nextInt(256)).toUpperCase(); 
 | 
  
 | 
        r = r.length() == 1 ? "0" + r : r ; 
 | 
        g = g.length() == 1 ? "0" + g : g ; 
 | 
        b = b.length() == 1 ? "0" + b : b ; 
 | 
  
 | 
        return "0xFF"+r + g + b; 
 | 
    } 
 | 
  
 | 
    public static boolean isCEN(String txt) { 
 | 
  
 | 
        Pattern p = Pattern.compile("[0-9]*"); 
 | 
        Matcher m = p.matcher(txt); 
 | 
        if (m.matches()) { 
 | 
            return true; 
 | 
        } 
 | 
        p = Pattern.compile("[a-zA-Z]"); 
 | 
        m = p.matcher(txt); 
 | 
        if (m.matches()) { 
 | 
            return true; 
 | 
        } 
 | 
        p = Pattern.compile("[\u4e00-\u9fa5]"); 
 | 
        m = p.matcher(txt); 
 | 
        if (m.matches()) { 
 | 
            return true; 
 | 
        } 
 | 
        return false; 
 | 
    } 
 | 
  
 | 
    public static boolean isLetterOrNum(String txt) { 
 | 
  
 | 
        Pattern p = Pattern.compile("[0-9]*"); 
 | 
        Matcher m = p.matcher(txt); 
 | 
        if (m.matches()) { 
 | 
            return true; 
 | 
        } 
 | 
        p = Pattern.compile("[a-zA-Z]"); 
 | 
        m = p.matcher(txt); 
 | 
        if (m.matches()) { 
 | 
            return true; 
 | 
        } 
 | 
        m = p.matcher(txt); 
 | 
        if (m.matches()) { 
 | 
            return true; 
 | 
        } 
 | 
        return false; 
 | 
    } 
 | 
  
 | 
    public static boolean isNumber(String txt) { 
 | 
        Pattern p = Pattern.compile("[0-9]*"); 
 | 
        Matcher m = p.matcher(txt); 
 | 
        if (m.matches()) { 
 | 
            return true; 
 | 
        } 
 | 
        return false; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 日期转换成Java字符串 
 | 
     * @param date 
 | 
     * @return str 
 | 
     */ 
 | 
    public static String DateToStr(Date date) { 
 | 
  
 | 
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
 | 
        String str = format.format(date); 
 | 
        return str; 
 | 
    } 
 | 
  
 | 
    public static String DateToStrSS(Date date) { 
 | 
  
 | 
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS"); 
 | 
        String str = format.format(date); 
 | 
        return str; 
 | 
    } 
 | 
  
 | 
    public static String getHM() { 
 | 
  
 | 
        SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss"); 
 | 
        String str = format.format(new Date()); 
 | 
        return str; 
 | 
    } 
 | 
  
 | 
    public static String DateToStrYMD(Date date) { 
 | 
  
 | 
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 
 | 
        String str = format.format(date); 
 | 
        return str; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 字符串转换成日期 
 | 
     * @param str 
 | 
     * @return date 
 | 
     */ 
 | 
    public static Date StrToDate(String str) { 
 | 
  
 | 
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
 | 
        Date date = null; 
 | 
        try { 
 | 
            date = format.parse(str); 
 | 
        } catch (ParseException e) { 
 | 
            e.printStackTrace(); 
 | 
        } 
 | 
        return date; 
 | 
    } 
 | 
  
 | 
    public static String removeWhiteSpace(String inputStr) { 
 | 
        String outputStr = ""; 
 | 
        if (inputStr != null && !inputStr.isEmpty()) { 
 | 
            //移除所有换行和空格 
 | 
            outputStr = inputStr.replaceAll("\\s+", ""); 
 | 
        } 
 | 
        return outputStr; 
 | 
    } 
 | 
} 
 |