java模板替换_⼀个简单的Java模板⼯具类(⼀)—正则加替
换实现
模板有很多的开源框架, freemarker, vilocity 等等.
但是现在我只是要⼀个简单的⼿机短信模板,不要那么复杂啊~~~
以前做过⼿机模板, 为了灵活,⽤的 XML+ OGNL , 挺蛋疼的, 在xml⾥⾯写ognl表达式~~~
现在⼜要弄⼿机模板了,我不要那么复杂~~~~
以上是废话(最近废话⽐较多),直接上代码吧....
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
public class SimpleTempletUtil {
public static final String DEFAULT_SPLIT = "$$";
public static void main(String[] args) {
Set paramNames = getParamNames("dddd$$aaa$$$$bbb$$ccc$$", "$$");
System.out.println(paramNames);
Map context = new HashMap();
context.put("aaa", "value1");
context.put("bbb", "value2");
String render = render("dddd$$aaa$$$$bbb$$ccc$$", context );
System.out.println(render);
}
/
**
* 使⽤context中对应的值替换templet中⽤$$包围的变量名(也是context的key)
* @param templet 模板
* @param context ⽤于替换模板中的变量
* @return 例如  参数 : dddd$$aaa$$$$bbb$$ccc$$, $$, {, }  结果:ddddvalue1value2ccc$$
*/
public static String render(String templet, Map context) {
return render(templet, DEFAULT_SPLIT, context);
}
/**
* 使⽤context中对应的值替换templet中⽤split包围的变量名(也是context的key)
* @param templet 模板
* @param split ⽤于标识变量名的标志
* @param context ⽤于替换模板中的变量
* @return 例如  参数 : dddd$$aaa$$$$bbb$$ccc$$, $$, {, }  结果:ddddvalue1value2ccc$$ */
public static String render(String templet, String split, Map context) {
Set paramNames = getParamNames(templet, split);
for (String name : paramNames) {
String value = (name);
value = value == null ? "" : value;
String regex = "\\Q" + split + name + split + "\\E";
templet = placeAll(regex, value);
}
return templet;
}
/**
* 根据分割符从模板中取得变量的名字($$变量名$$) eg:
* $$aaa$$$$bbb$$ccc$$ 返回  aaa,bbb
* @param templet 模板
* @param split 包围变量名的字符串
* @return 模板中的变量名
*/
replaceall()
public static Set getParamNames(String templet, String split) {
Set paramNames = new HashSet();
int start = 0, end = 0;
while (end
start = templet.indexOf(split, end) + split.length();
if (start == -1) {
break;
}
end = templet.indexOf(split, start);
if (end == -1) {
break;
}
paramNames.add(templet.substring(start, end));
end = end + split.length();
}
return paramNames;
}
}
使⽤很简单运⾏下⾯的代码
Set paramNames = getParamNames("dddd$$aaa$$$$bbb$$ccc$$", "$$"); System.out.println(paramNames);
Map context = new HashMap();
context.put("aaa", "value1");
context.put("bbb", "value2");
String render = render("dddd$$aaa$$$$bbb$$ccc$$", context ); System.out.println(render);
显⽰结果:
[aaa, bbb]
ddddvalue1value2ccc$$
⽐较简单,如果为了灵活的配置,可以写到Spirng的配置⽂件中. 如
这样以后改模板就只⽤改Spring配置⽂件了.
如果想要改了不重启马上⽣效,那么可以放数据库...
简单的东西只适⽤于简单的情况, 改类不是万能的, 请悠着点...
以上皆为原创,转载请注明!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。