写一个模版参数替换基于el表示达式的Java工具类
时间: 2024-02-09 21:12:32 浏览: 75
好的,我理解你的问题了。下面是一个基于el表达式的Java工具类,用于模板参数替换。
```java
import javax.el.ExpressionFactory;
import javax.el.ValueExpression;
public class ELUtils {
/**
* 替换el表达式中的参数
* @param template 带有el表达式的模版字符串
* @param params 参数集合
* @return 替换后的字符串
*/
public static String replaceParams(String template, Object... params) {
ExpressionFactory factory = ExpressionFactory.newInstance();
ValueExpression ve = factory.createValueExpression(new ParamsELResolver(params), template, String.class);
return (String) ve.getValue(null);
}
/**
* 自定义EL解析器,用于解析参数
*/
private static class ParamsELResolver extends javax.el.ELResolver {
private final Object[] params;
public ParamsELResolver(Object[] params) {
this.params = params;
}
@Override
public Object getValue(javax.el.ELContext context, Object base, Object property) {
if (params != null && property != null) {
int index = Integer.parseInt(property.toString());
if (index >= 0 && index < params.length) {
context.setPropertyResolved(true);
return params[index];
}
}
return null;
}
// 其他方法可不实现
}
}
```
使用方式:
```java
String template = "Hello, ${0}! You are ${1} years old.";
String result = ELUtils.replaceParams(template, "Tom", 25);
System.out.println(result); // Hello, Tom! You are 25 years old.
```
在模版字符串中,使用`${index}`表示使用第`index`个参数进行替换。在`replaceParams`方法中,通过自定义的EL解析器将参数传入表达式中进行替换。
阅读全文