首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

修改正则表达式解决思路

2012-01-14 
修改正则表达式目的:把字符串中以f开头的一串数字保留,其他数字替换为*Java codepublic static void main(

修改正则表达式
目的:把字符串中以f开头的一串数字保留,其他数字替换为*

Java code
    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?

[解决办法]
只用一个正则表达式恐怕解决不了吧
[解决办法]
Java code
  String s2 = s.replaceAll("(?<!e)[0-9]+?", "*");
[解决办法]
分开来吧,一次性的正则不容易
[解决办法]
这样吧
Java code
         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);
[解决办法]
f\d+
[解决办法]
Java code
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);
[解决办法]
Java code
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);
[解决办法]
就看LZ什么需求了
Java code
String s = "abc11,cd123 f7895 abcd1234 ef1234 abc123";s = s.replaceAll("([^f\\d]+)\\d+", "$1");System.out.println(s); 

热点排行