java-如何使用表达式语言解析模板化句子“#{name}邀请您”
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-如何使用表达式语言解析模板化句子“#{name}邀请您”,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2198字,纯文字阅读大概需要4分钟。
内容图文
![java-如何使用表达式语言解析模板化句子“#{name}邀请您”](/upload/InfoBanner/zyjiaocheng/673/15dcffb6d2174a6ca9699ef07f41a3c7.jpg)
我是Java的新手.
我的目的是在Java程序中使用类似于句子的模板(没有JSP或任何与Web相关的页面)
例:
String name = "Jon";
"#{ name } invited you";
or
String user.name = "Jon";
"#{ user.name } invited you";
如果我将此字符串传递给某种方法,我应该得到
"Jon invited you"
我已经看过一些表达语言MVEL,OGNL,JSTL EL
在MVEL和OGNL中,我必须编写一些代码集来实现此目的,但是要采用其他方式.
我只能在JSP文件中而不是在Java程序中使用JSTL EL来实现此目的.
有什么办法可以做到这一点?
提前致谢.
乔恩
解决方法:
Is there any way to achieve this?
我不是100%肯定我了解您的要求,但是这里有一些提示…
看一下API中的MessageFormat类.您可能也对Formatter类和/或String.format方法感兴趣.
如果您有一些属性,并且想要搜索和替换形状为#{property.key}的子字符串,您也可以这样做:
import java.util.Properties;
import java.util.regex.*;
class Test {
public static String process(String template, Properties props) {
Matcher m = Pattern.compile("#\\{(.*?)\\}").matcher(template);
StringBuffer sb = new StringBuffer();
while (m.find())
m.appendReplacement(sb, props.getProperty(m.group(1).trim()));
m.appendTail(sb);
return sb.toString();
}
public static void main(String[] args) {
Properties props = new Properties();
props.put("user.name", "Jon");
props.put("user.email", "jon.doe@example.com");
String template = "Name: #{ user.name }, email: #{ user.email }";
// Prints "Name: Jon, email: jon.doe@example.com"
System.out.println(process(template, props));
}
}
如果您有实际的POJO而不是Properties对象,则可以进行反射,如下所示:
import java.util.regex.*;
class User {
String name;
String email;
}
class Test {
public static String process(String template, User user) throws Exception {
Matcher m = Pattern.compile("#\\{(.*?)\\}").matcher(template);
StringBuffer sb = new StringBuffer();
while (m.find()) {
String fieldId = m.group(1).trim();
Object val = User.class.getDeclaredField(fieldId).get(user);
m.appendReplacement(sb, String.valueOf(val));
}
m.appendTail(sb);
return sb.toString();
}
public static void main(String[] args) throws Exception {
User user = new User();
user.name = "Jon";
user.email = "jon.doe@example.com";
String template = "Name: #{ name }, email: #{ email }";
System.out.println(process(template, user));
}
}
…但是它变得越来越丑陋,我建议您考虑更深入地研究一些第三方库来解决此问题.
内容总结
以上是互联网集市为您收集整理的java-如何使用表达式语言解析模板化句子“#{name}邀请您”全部内容,希望文章能够帮你解决java-如何使用表达式语言解析模板化句子“#{name}邀请您”所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。