类模板语言的变量替换~简易java实现

场景1:数据库存有 xx,yy,zz,aa,bb 等字段, 但是前台根据不同场景需要选择性的展示部分字段,并且需求频繁调整。

            这里的需求调整可以有前台展示的调整,也会有后台DB字段的调整

 

场景2:自定语法的模版语言实现

 

举例xx=11&yy=22&zz=33&aa=55&bb=4

          , 定义模板“${/xx}在${yy}时刻,修改${zz}

          前台输出  模板11在22时刻,修改33

 

核心实现:

 

 

template = mapping.getInfo(); //${/xx}在${yy}时刻,修改${zz}
//用参数替换模板中的${}变量
Matcher m = Pattern.compile("\\$\\{\\w+\\}").matcher(template);

StringBuffer sb = new StringBuffer();

while (m.find()) {
	String param = m.group(); //${xx}
	Object value = paramMap.get( param.substring(2, param.length() - 1));

       m.appendReplacement(sb, value==null?"":value.toString());
}

m.appendTail(sb);

 

源自早期实现的一个日志统计分析报表实现。鉴于项目被打入冷宫,扣出这一段觉得还有点价值的代码留存备份

 

其他:

1. 鉴于上述 xx=11&yy=22的格式,需要对value值进行=和&的转义,输出时反转义。

 

2. 直接在DB里面varchar(1000),用于存储n个未知变量xx=11&yy=22的方式,也是很靠谱的。但是,一些关键需要索引的变量,还是单独字段来存储。

 

3. 读写分离,用这种方式做日志的聚合和过滤查询非常happy,但是需要做MS主从结构, 写需要做成异步。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用Apache PDFBox来读取和编辑PDF模板文件,并使用Java代码替换变量。 以下是一个简单的示例,演示如何在PDF模板替换变量: ```java import java.io.File; import java.io.IOException; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.edit.PDPageContentStream; import org.apache.pdfbox.pdmodel.font.PDType1Font; import org.apache.pdfbox.pdmodel.graphics.image.LosslessFactory; import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; public class PDFEditor { public static void main(String[] args) throws IOException { // Load template PDF file PDDocument document = PDDocument.load(new File("template.pdf")); // Get the first page of the document PDPage page = document.getPage(0); // Create a new content stream to add text and images PDPageContentStream contentStream = new PDPageContentStream(document, page, true, true); // Set the font and font size for the text contentStream.setFont(PDType1Font.HELVETICA_BOLD, 12); // Replace the variable "name" with the actual name value String name = "John Doe"; contentStream.beginText(); contentStream.newLineAtOffset(100, 700); contentStream.showText(name); contentStream.endText(); // Replace the variable "image" with the actual image file PDImageXObject image = LosslessFactory.createFromImage(document, ImageIO.read(new File("image.jpg"))); contentStream.drawImage(image, 100, 600, image.getWidth(), image.getHeight()); // Close the content stream and save the document contentStream.close(); document.save(new File("output.pdf")); } } ``` 在此示例中,我们首先加载PDF模板文件,并获取第一页。然后,我们创建一个新的内容流,设置字体和字体大小,并使用`beginText()`和`endText()`方法添加文本。我们还使用`drawImage()`方法添加图像。 最后,我们关闭内容流并保存文档。在输出文件中,我们应该看到已经替换模板中的变量。 请意,这只是一个简单的示例,您可以根据自己的需求进行更改。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值