JAVA正则表达式(二)

简介:适用于主表明细表数据,通过自定义模板,展现定制内容。

 

模拟例子:

 

~数据源

 

// 主信息
Map<String, String> mainmap = new HashMap<String, String>();
mainmap.put("z", "animals");

// 从信息		
Map<String, String> map1 = new HashMap<String, String>();
map1.put("x", "cat");
map1.put("y", "miaomiao");
Map<String, String> map2 = new HashMap<String, String>();
map2.put("x", "dog");
map2.put("y", "wangwang");
Map<String, String> map3 = new HashMap<String, String>();
map3.put("x", "pig");
map3.put("y", "hengheng");
List<Map<String, String>> list = new ArrayList<Map<String, String>>();
list.add(map1);
list.add(map2);
list.add(map3);

 

~自定义模板

String template = "$z singing\n#{$xs - $y...\n}end";

 

~定制程序片

for (String key : mainmap.keySet()) {
      template = template.replaceAll("\\$" + key, mainmap.get(key));
}
		
Pattern p = Pattern.compile("\\#\\{([^\\}]*)\\}");
Matcher m = p.matcher(template);
StringBuffer sb = new StringBuffer();
while (m.find()) {
      String forstr = m.group(1);
      StringBuffer replacestr = new StringBuffer();
      for (Map<String, String> map : list) {
            String tmp = forstr;
            for (String key : map.keySet()) 
                  tmp = tmp.replaceAll("\\$" + key, map.get(key));
            replacestr.append(tmp);
      }
      m.appendReplacement(sb, replacestr.toString());
}
m.appendTail(sb);
System.out.println(sb.toString());

 

~运行结果

animals singing
cats - miaomiao...
dogs - wangwang...
pigs - hengheng...
end

 

注:同事在使用过程中发现,若存在$a和$aa的变量时,需要注意替换的顺序。

或者安全起见可以使用$|a|和$|aa|来界定变量,界定符不能为{}否则会和#{}引起冲突导致正则失败。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值