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 = context.get(name);

value = value == null ? "" : value;

String regex = "\\Q" + split + name + split + "\\E";

templet = templet.replaceAll(regex, value);

}

return templet;

}

/**

* 根据分割符从模板中取得变量的名字($$变量名$$) eg:

* $$aaa$$$$bbb$$ccc$$ 返回   aaa,bbb

* @param templet 模板

* @param split 包围变量名的字符串

* @return 模板中的变量名

*/

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配置文件了.

如果想要改了不重启马上生效,那么可以放数据库...

简单的东西只适用于简单的情况, 改类不是万能的, 请悠着点...

以上皆为原创,转载请注明!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java正则表达式是一种用于匹配、查找和替换文本的强大工具。它可以用于验证输入是否符合特定的格式、从文本中提取信息、以及将文本中的某些内容替换成其他内容。 下面是一些示例代码,说明如何使用Java正则表达式进行匹配、替换和查找操作: 1. 匹配操作: ```java String input = "This is a test string."; String pattern = "test"; // 创建 Pattern 对象 Pattern p = Pattern.compile(pattern); // 执行匹配操作 Matcher m = p.matcher(input); if (m.find()) { System.out.println("Found match at index " + m.start() + " to " + m.end()); } else { System.out.println("No match found."); } ``` 这段代码首先定义了一个输入字符串一个正则表达式模式,然后创建了一个 Pattern 对象,并使用该对象对输入字符串进行匹配操作。如果找到了匹配项,则输出其开始和结束位置;否则,输出未找到匹配项的提示信息。 2. 替换操作: ```java String input = "This is a test string."; String pattern = "test"; String replacement = "example"; // 执行替换操作 String output = input.replaceAll(pattern, replacement); System.out.println("Output string: " + output); ``` 这段代码使用了 String 类的 replaceAll() 方法,将输入字符串中所有匹配正则表达式模式的部分替换成指定的字符串替换后的字符串将被输出到控制台。 3. 查找操作: ```java String input = "This is a test string."; String pattern = "\\w+"; // 创建 Pattern 对象 Pattern p = Pattern.compile(pattern); // 执行查找操作 Matcher m = p.matcher(input); while (m.find()) { System.out.println("Found match: " + m.group()); } ``` 这段代码使用了一个正则表达式模式,该模式匹配一个或多个字母、数字或下划线字符。然后,它创建了一个 Pattern 对象,并使用该对象对输入字符串进行查找操作。如果找到了匹配项,则输出其内容;否则,继续查找下一个匹配项。这里使用了 Matcher 类的 find() 方法来查找所有匹配项。 以上是Java正则表达式的一些基本用法,可以根据具体需求进行调整和扩展。通过学习Java正则表达式,我们可以更轻松地处理文本数据,并快速准确地完成各种文本处理任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值