有这样一个场景:替换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); }}