首页 > 其他分享 >模板变量替换(正则表达式)

模板变量替换(正则表达式)

时间:2022-09-30 17:23:03浏览次数:49  
标签:map String 正则表达式 matcher stringBuffer VALUES sql 替换 模板

public class TemplateReplaceTest {

public static void main(String[] args) {
String sql = "INSERT INTO ${tableName} " +
"(${COLUMNS}) " +
"VALUES (${VALUES})";

Map<String,String> map = new HashMap<>();
map.put("tableName","product");
map.put("COLUMNS","id,age,name");
map.put("VALUES","000001,20,'xiaoming'");

System.out.println(attributesReplace(sql,map));

}

/**
* 变量替换
* @param sql
* @param map
* @return
*/
public static String attributesReplace(String sql, Map<String,String> map){
//生成匹配模式的正则表达式
String patternString = "\\$\\{(" + StringUtils.join(map.keySet(), "|") + ")\\}";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(sql);
//两个方法:appendReplacement, appendTail
StringBuffer stringBuffer = new StringBuffer();
while(matcher.find()) {
matcher.appendReplacement(stringBuffer, map.get(matcher.group(1)));
}
matcher.appendTail(stringBuffer);
return stringBuffer.toString();
}
}

执行结果:

INSERT INTO product (id,age,name) VALUES (000001,20,'xiaoming')

StringUtils依赖

   <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.11</version>
        </dependency>

 

标签:map,String,正则表达式,matcher,stringBuffer,VALUES,sql,替换,模板
From: https://www.cnblogs.com/yangh2016/p/16745594.html

相关文章

  • laravel dact 表格列表中的 别的表id替换成别的 表的昵称
    案例:控制器:protectedfunctiongrid(){ ----这里1returnGrid::make(Seckill::with('shopgoods'),function(Grid$grid){ ......
  • 代码模板存档
    代码模板存档)2022.9.30增加并查集、埃氏筛、线性筛、快速幂、扩展欧几里得、求逆元一般C++比赛文件模板#include<bits/stdc++.h>usingi64=longlong;intm......
  • 【正则】954- 正则表达式有几种字符匹配模式?
    最近再一次重温老姚大佬的《JavaScript正则表达式迷你书》,并将核心知识点整理一遍,方便复习。原书写得非常棒,建议看下原书啦。 地址:https://github.com/qdlaoyao/js-reg......
  • 模板引擎
    模板引擎的原理正则与字符串操作exec()函数用于检索字符串中的正则表达式的匹配RegExpObject.exec(string)分组正则表达式提取自己想要的内容{{name}}/{{......
  • 模板:函数模板
    1模板的基础知识1.1模板的参数在技术文献中:parameter翻译成形参(formatparameter),argument翻译成实参(actualparameter).Atypeparametercanbeusedtoname......
  • 正则表达式
    正则表达式符号描述?0个或1个,它就像是可选链操作符*0个或1个或多个+1个或多个......
  • 【模板】BM字符串匹配
    据说效率是KMP的\(3\sim4\)倍。主要利用坏字符和好后缀进行跳转来避免过多的匹配。这篇博客讲的很好,推荐大家看看。#include<iostream>#include<vector>#incl......
  • 正则表达式中^的用法
    在使用正则表达式^的时候,有两层意思一限定开头放在规则的开头部分,表示限定开头/^a/表示以a开头 二(否)取反在中括号”[]”中被使用的话就是表示字符类的否定,在这个字......
  • 模板建立
    模板建立步骤如果还没有建立一个组存储自己的模板,则先选择2(红框处)然后取个名字就好如果已经有组了,在自己建立的组内添加新模板1:后续快速生成使用的代码2:......
  • 【Kettle】字符串替换不起作用
         字符串替换节点不起作用,一个原因是输入流字段和输出流字段名称相同,一个解决办法是修改输出流字段名称  ......