有这样一个场景:替换sql字符串中的占位符,String sql = "select * from #{tableName}";。
有朋友会想直接用String.RepaceAll()替换就可以啦?但是“#{tableName}”是合法值域中的任意一个值,也就是说“#{table}”,“#{table1}”等都是合法的。
这时String类的方法就不够使了。下面介绍Pattern和Matcher两个类,用代码演示上述需求:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Created by nipin on 16/11/16.
*/
public class Regix {
public static void main(String[] args) {
String sql = "select * from #{tableName}";
Pattern pattern = Pattern.compile("(#\\{.*\\})");
Matcher matcher = pattern.matcher(sql);
if (matcher.find()) {
System.out.println(matcher.group(0));
}
sql = matcher.replaceAll("your_table");
System.out.println(sql);
}
}