Java写一个模版参数替换 基于el表达式的 工具类

时间: 2024-02-09 17:09:25 浏览: 22
好的,我可以为您提供一个基于EL表达式的模板参数替换的Java工具类。代码如下: ```java import javax.el.ELContext; import javax.el.ExpressionFactory; import javax.el.ValueExpression; public class TemplateUtils { /** * 根据模版和参数替换模版中的参数 * @param template 模版 * @param params 参数 * @return 替换后的字符串 */ public static String replace(String template, ParamMap params) { ExpressionFactory factory = ExpressionFactory.newInstance(); ELContext context = new SimpleContext(params); ValueExpression expr = factory.createValueExpression(context, template, String.class); return (String) expr.getValue(context); } /** * 简单的EL上下文,用于将参数映射到EL表达式中 */ private static class SimpleContext extends ELContext { private ParamMap params; public SimpleContext(ParamMap params) { this.params = params; } @Override public ELResolver getELResolver() { return null; } @Override public FunctionMapper getFunctionMapper() { return null; } @Override public VariableMapper getVariableMapper() { return new SimpleVariableMapper(params); } } /** * 简单的变量映射器,用于将参数映射到EL表达式中的变量 */ private static class SimpleVariableMapper extends VariableMapper { private ParamMap params; public SimpleVariableMapper(ParamMap params) { this.params = params; } @Override public ValueExpression resolveVariable(String variable) { return params.containsKey(variable) ? createValueExpression(params.get(variable)) : null; } @Override public ValueExpression setVariable(String variable, ValueExpression expression) { return null; } } /** * 参数映射 */ public static class ParamMap extends HashMap<String, Object> { private static final long serialVersionUID = 1L; public ParamMap() { super(); } public ParamMap(Map<String, Object> map) { super(map); } } } ``` 使用方法: ```java String template = "hello ${name}, your age is ${age}"; TemplateUtils.ParamMap params = new TemplateUtils.ParamMap(); params.put("name", "John"); params.put("age", 30); String result = TemplateUtils.replace(template, params); System.out.println(result); ``` 输出结果: ``` hello John, your age is 30 ``` 以上代码通过EL表达式来实现模板参数的替换,同时使用了一个简单的EL上下文和变量映射器来将参数映射到EL表达式中。希望能够满足您的需求。

相关推荐

最新推荐

recommend-type

Java用正则表达式实现${name}形式的字符串模板实例

主要给大家介绍了Java如何用正则表达式实现${name}形式的字符串模板,文章给出详细的实例代码,对大家的理解和学习会很有帮助,有需要的朋友们下面来一起看看吧。
recommend-type

Java使用正则表达式验证用户名和密码的方法

主要介绍了Java使用正则表达式验证用户名和密码的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
recommend-type

基于Java写minio客户端实现上传下载文件

主要介绍了基于Java写minio客户端实现上传下载文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
recommend-type

JAVA对象序列化保存为XML文件的工具类

在java.beans包中,有两个好东西,XMLEncoder和XMLDecoder。从XML存取对象真是太费力气啦。做了小工具类,以后可以用用了。本文介绍了这两个可以把JAVA对象序列化保存为XML文件的工具类。
recommend-type

Java根据模板导出Excel报表并复制模板生成多个Sheet页

本文主要介绍了Java根据模板导出Excel报表并复制模板生成多个Sheet页的方法,具有很好的参考价值。下面跟着小编一起来看下吧
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

用matlab绘制高斯色噪声情况下的频率估计CRLB,其中w(n)是零均值高斯色噪声,w(n)=0.8*w(n-1)+e(n),e(n)服从零均值方差为se的高斯分布

以下是用matlab绘制高斯色噪声情况下频率估计CRLB的代码: ```matlab % 参数设置 N = 100; % 信号长度 se = 0.5; % 噪声方差 w = zeros(N,1); % 高斯色噪声 w(1) = randn(1)*sqrt(se); for n = 2:N w(n) = 0.8*w(n-1) + randn(1)*sqrt(se); end % 计算频率估计CRLB fs = 1; % 采样频率 df = 0.01; % 频率分辨率 f = 0:df:fs/2; % 频率范围 M = length(f); CRLB = zeros(M,1); for
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。