1399996aa535bb800
13####6##535##8##
上边替换成下边的样子
String tel="13996aa535bb800";
        String reg = "(.)\\1";
        System.out.println(tel);
        Pattern p = Pattern.compile(reg);
        
        Matcher m = p.matcher(tel);
        
        while (m.find()){
        String s = m.group();
        
        int len = s.length();
        String replace= "";
        for(int i=0; i<len; i++){
         replace += "#";
        }
        tel = tel.replaceFirst(s, replace);
        }
        System.out.println(tel);
这个是我写的。有谁可以看看有什么更简单。更简洁的实现这个功能。java语言

解决方案 »

  1.   

    public static void main(String[] args) {
    String tel="13996aa535bb800";
    String[] str = tel.split("");
    for(int i=0;i<str.length; i++){
    if(i+1<str.length && str[i].equals(str[i+1])){
    if(0==i){
    tel = "#"+tel.substring(1, str.length);
    }else{
    tel = tel.substring(0, i)+"#"+tel.substring(i+1, str.length);
    }

    }
    if(i>0){
    if(str[i-1].equals(str[i])){
    if(0==i){
    tel = "#"+tel.substring(1, str.length);
    }else{
    tel = tel.substring(0, i)+"#"+tel.substring(i+1, str.length);
    }

    }
    }

    System.out.println(tel);
    }
    }
      

  2.   

    13996aa535bb800
    13996aa535bb800
    13#96aa535bb800
    13##6aa535bb800
    13##6aa535bb800
    13##6#a535bb800
    13##6##535bb800
    13##6##535bb800
    13##6##535bb800
    13##6##535bb800
    13##6##535#b800
    13##6##535##800
    13##6##535##800
    13##6##535##8#0
    13##6##535##8##
      

  3.   


    /**
     * 
     * @param str 待处理的字符串
     * @param replacement 处理成的目标字符
     * @param ignoreCase 是否忽略大小写
     * @return
     */
    public static String filterRepetition(String str,String replacement,boolean ignoreCase) {
    String regex="(.)\\1+";
    regex=ignoreCase?("(?i)"+regex):regex;
    Matcher m=Pattern.compile(regex,Pattern.DOTALL).matcher(str);
    StringBuffer result=new StringBuffer();
    while(m.find()){
    m.appendReplacement(result, m.group().replaceAll(".", replacement));
    }
    m.appendTail(result);
    return result.toString();
    }
      

  4.   

    楼上的过滤替换函数在我机器里没跑通,我改造了一下
    /**
     * 
     * @param str 待处理的字符串
     * @param replacement 处理成的目标字符
     * @param ignoreCase 是否忽略大小写
     * @return
     */
    public static String filterRepetition(String str,char replacement,boolean ignoreCase) {
    String regex="(.)\\1+";
    regex=ignoreCase?("(?i)"+regex):regex;
    Matcher m=Pattern.compile(regex,Pattern.DOTALL).matcher(str);
    while(m.find()){
    char[] ca = new char[m.group().length()];
    Arrays.fill(ca, replacement);
    String replaceStr = String.copyValueOf(ca);
    str = str.replace(m.group(), replaceStr);
    }
    return str;
    }
      

  5.   

        @Test
        public void t4() {
            String str = "1399996aa535bb800";
            List<String> ls = new ArrayList<String>();
            Pattern pattern = Pattern.compile("(\\w)((?=\\1)(\\1))+");
            Matcher matcher = pattern.matcher(str);
            while (matcher.find()) {
                String temp = matcher.group().replaceAll("\\w", "#");
                str = str.replace(matcher.group(), temp);
            }
            System.out.println(str);
        }我写了个,感觉还可以
      

  6.   


    public static void main(String[] args) throws Exception{
    String formData = "1399996aa535bb800";
    System.out.println(formData.replaceAll("(\\d{2}).{4}(\\d).{2}(\\d{3}).{2}(\\d).{2}", "$1####$2##$3##$4##"));
    //13####6##535##8##
    }