比如"嘿嘿喔就是喜欢北京天安门杂各地"
 将"嘿"替换成"哈","北京"替换成"beijing"  ,"扎各地" 替换"ZGD" ,假设String较长,替换内容也不少,怎么操作比较有效和高效?

解决方案 »

  1.   

    感觉只能一种情况一个replaceAll吧.
      

  2.   


    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    public class  TestDemo {
    public static void main(String[] args)  {

    Pattern pattern = Pattern.compile("(嘿嘿)");
    Matcher matcher = pattern.matcher("啊啊杂各地啊我是你是嘿嘿喔就是嘿嘿喜欢北京天安门北京杂各地");
    StringBuffer sbr = new StringBuffer();
    while (matcher.find()) {
        matcher.appendReplacement(sbr, "哈");
    }
    matcher.appendTail(sbr);
    pattern = Pattern.compile("(北京)");
    matcher=pattern.matcher(sbr.toString());
    StringBuffer sbr1 = new StringBuffer();
    while (matcher.find()) {
        matcher.appendReplacement(sbr1, "beijing");
    }
    matcher.appendTail(sbr1);
    pattern = Pattern.compile("(杂各地)");
    matcher=pattern.matcher(sbr1.toString());
    StringBuffer sbr2 = new StringBuffer();
    while (matcher.find()) {
        matcher.appendReplacement(sbr2, "ZGD");
    }
    matcher.appendTail(sbr2);
    System.out.println(sbr2.toString()); }
    }使用replaceAll一次次的可以,用上面的思想,你想想是否能够一次替换掉。
      

  3.   

    最好的办法就是下面的这种了.
    可以避免replaceAll产生的大量的的垃圾。速度也应该是可以的。只是事先要把所以被替换的字符串和替换的字符串做成一个Map.import java.util.regex.*; 
    import java.util.*;
    public class test{     public static void main(String args[]) {
         String str="嘿嘿喔就是喜欢北京天安门杂各地";
         Map<String,String> myMap=new HashMap<String,String>();
         myMap.put("嘿","哈");
         myMap.put("北京","BeiJing");
         myMap.put("杂各地","ZGD");
         String regex="HN-20080819-10*([1-9][0-9]*)";
         Pattern p = Pattern.compile("嘿|北京|杂各地");
         Matcher m = p.matcher(str);
         StringBuffer sb = new StringBuffer();
         while (m.find()) {
         m.appendReplacement(sb,myMap.get(m.group()));
         }
         m.appendTail(sb);
         System.out.println(sb.toString());
        }
    }F:\java>java test
    哈哈喔就是喜欢BeiJing天安门ZGD