Discuss / Java / 尝试了两种实现方式,各有优缺点

尝试了两种实现方式,各有优缺点

Topic source

よろしく

#1 Created at ... [Delete] [Delete and Lock User]
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class one {
  public static void main(String[] args) {
      Map<String, String> maps = new HashMap<>();
      maps.put("name","Tom");
      maps.put("age", "14");
      String s = "Hello ,${name}!,you are ${age}  years old.";
      System.out.println(Replace.Replace(s, maps));
  }
}

class Replace{
  public static String Replace(String string,Map<String,String> map){
    String zz = string;
    Pattern p = Pattern.compile("\\$\\{(\\w+?)\\}");
    Matcher m = p.matcher(string);
    String sub,match,val;
    while(m.find()){
            sub = string.substring(m.start(),m.end());
            match = m.group(1);
            val = map.get(match);
            zz = zz.replace(sub, val);
        }  
    return zz;
  }
}
==========================================================================
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class two {
    public static void main(String[] args) {
        Map<String, String> maps = new HashMap<>();
      maps.put("name","Tom");
      maps.put("age", "14");
      String s = "Hello ,${name}!,you are ${age} years old.";
      System.out.println(Replace.rep(maps, s));
    }
}

class Replace{
    public static String rep(Map<String,String> map,String original){
        StringBuilder sb = new StringBuilder();
        Pattern p = Pattern.compile("\\$\\{(\\w+?)\\}");
        Matcher m = p.matcher(original);
        String match;
        int start=0;
        while(m.find()){
                sb.append(original.substring(start,m.start()));
                match = m.group(1);
                sb.append(map.get(match));
                start = m.end();
        }
        sb.append(original.substring(start, original.length()));
        return sb.toString();
    }
}

よろしく

#2 Created at ... [Delete] [Delete and Lock User]
//尝试使用appendReplacement()方法,其实现原理和方法二其实是一个意思。
class Replace{
  public static String rep(String string,Map<String,String> map){
    Pattern p = Pattern.compile("\\$\\{(\\w+?)\\}");
    Matcher m = p.matcher(string);
    StringBuffer result = new StringBuffer();
    while(m.find()){
            String match = m.group(1);
            m.appendReplacement(result, map.get(match));
        }  
        m.appendTail(result);
    return result.toString();
  }
}

  • 1

Reply