62,614
社区成员
发帖
与我相关
我的任务
分享
select * from tab where r1 = ? and r2=? and r3=? and r4 = ?
select * from tab where r1=:V_r1 and r2=:V_r2 and r3 = :v_r3 and r4=:Vr1
String s = "select * from tab where r1=:V_r1 and r2=:V_r2 and r3 = :v_r3 and r4='Vr1'";
Map<String, String> m = new HashMap<>();
m.put("V_r1", "V_r1_val");
m.put("V_r2", "V_r2_val");
m.put("v_r3", "v_r3_val");
m.put("Vr1", "Vr1_val");
StringBuilder rg = new StringBuilder();
boolean f = true;
for(String k : m.keySet()) {
if(!f) {
rg.append('|');
} else {
f = false;
}
rg.append(':' + k);
}
Matcher mcr = Pattern.compile("('(''|[^'])*'|("+ rg.toString() +"))").matcher(s);
StringBuffer sb = new StringBuffer();
for (; mcr.find();) {
String g = mcr.group();
if(g.length() < 2 || g.charAt(0) != ':') {
continue;
}
String v = m.get(g.substring(1));
if(v == null) {
continue;
}
mcr.appendReplacement(sb, '\'' + v + '\'');
}
mcr.appendTail(sb);
System.out.println(sb.toString());