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|来界定变量,界定符不能为{}否则会和#{}引起冲突导致正则失败。

 

你可能感兴趣的:(java,正则表达式)