目的:把字符串中以f开头的一串数字保留,其他数字替换为*
public static void main(String[] args) {
String s ="abc11,cd123 f7895";
String s2 = s.replaceAll("(?<!f)[0-9]+?", "*");
System.out.println(s);
System.out.println(s2);
}结果是
abc11,cd123 f1123
abc**,cd*** f7***
怎样让他保留f7895而不是f7?

解决方案 »

  1.   


      String s2 = s.replaceAll("(?<!e)[0-9]+?", "*");
      

  2.   

    这样吧  String s ="abc11,cd123 f7895";
     String[] s2 = s.split("(?<!\\w)");
     StringBuffer sb = new StringBuffer();
           for(int i = 1; i < s2.length;i++) {
           if(s2[i].charAt(0)!='f') {
           sb.append(s2[i].replaceAll("\\d","*"));
           }
           else {
           sb.append(s2[i]);
           }
           }
           
            System.out.println(s);
            System.out.println(sb);
      

  3.   

    String s = "abc11,cd123 f7895 abcd1234 ef1234 abc123";
    Pattern p = Pattern.compile(".*?\\d+");
    Matcher m = p.matcher(s);
    StringBuffer sb = new StringBuffer();
    while (m.find()) {
        if (!m.group().matches("\\W*f\\d+")) { // 如果是f后跟数字不替换就用 .*?f\\d+
            m.appendReplacement(sb, m.group().replaceAll("\\d+", ""));
        }
    }
    m.appendTail(sb);
    System.out.println(sb);
      

  4.   

    String str="abc11,cd123 f7895";
    str=" "+str+" ";
    Pattern pat=Pattern.compile("[^f0-9][0-9]+(?=[^0-9])");
    Matcher mcr=pat.matcher(str);
    StringBuffer sb=new StringBuffer();
    while(mcr.find()){
    mcr.appendReplacement(sb, mcr.group().replaceAll("[0-9]", "*"));
    }
    mcr.appendTail(sb);
    str=sb.toString().replaceAll("^ | $","");
    System.out.println(str);
    如果不区分数字多少的话 就简单了
    String str="abc11,cd123 f7895";
    str=" "+str+" ";
    str=str.replaceAll("([^f0-9])[0-9]+(?=[^0-9])", "$1*");
    str=str.replaceAll("^ | $","");
    System.out.println(str);
      

  5.   

    就看LZ什么需求了
    String s = "abc11,cd123 f7895 abcd1234 ef1234 abc123";
    s = s.replaceAll("([^f\\d]+)\\d+", "$1");
    System.out.println(s);