高分悬赏:Java语言怎么把一个字符串中出现的电话号码,中间4位全部替换为****

问题描述:

高分悬赏:Java语言怎么把一个字符串中出现的电话号码,中间4位全部替换为****

直接遍历字符串,设置对应 inde 处的值为 *,参考伪代码:

public static void main(String[] args) {
        String ss = "13241920182";
        char [] chars = ss.toCharArray();
        for(int i=4;i<8;i++) {
            chars[i] = '*';
        }

        System.out.println(new String(chars));
    }

public static void main(String[] args) {

    String phone = "13021212122";
    String newPhone = phone.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");

    System.out.println(newPhone);

}

    /**
     * 生成对应手机号脱敏数据
     *
     * @param phoneNo
     * @return 152****4799
     */
    public static String getPhoneNoMask(String phoneNo) {
        if (!StringUtils.isBlank(phoneNo)) {
            return phoneNo.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
        }
        return null;
    }

public static void main(String[] args){
    String str = "12345678912";  //手机号
    System.out.println(str);
    StringBuilder sb = new StringBuilder(str);
    sb.replace(3,7,"****");   //[3,7)
    System.out.println(sb);
}

            String pNumber = "18255478965";
            String newNumber = pNumber.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");

    /**
     *号码脱敏
     * @param msg content
     * @param search "(\\d{3})\\d{4}(\\d{4})"
     * @param replace "$1****$2"
     * @return 脱敏后的字符串
     */
    public static String desensitizeMsg(String msg, String search, String replace) {
        final Pattern phonePattern = Pattern.compile(search);
        Matcher phoneMatcher= phonePattern.matcher(msg);
        if(phoneMatcher.find()){
            final String[] split = msg.split(phoneMatcher.group());
                        //TODO: 这里replace要改下
   return desensitizeMsg(split[0]+phoneMatcher.group().replace("",replace)+split[1],search,replace);
        }else{
            return msg;
        }
    }

这是一段伪代码,仅供参考。。。(谁有空补全下呀)

    String phone=“18999999999”;
    phone.replace(phone.substring(4,8),"****");