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

 更新时间:2016年12月16日 10:35:46   投稿:daisy  
这篇文章主要给大家介绍了Java如何用正则表达式实现${name}形式的字符串模板,文章给出详细的实例代码,对大家的理解和学习会很有帮助,有需要的朋友们下面来一起看看吧。

前言

相信大家可能曾遇到过这种情况,在开发中类似站内信的需求时,我们经常要使用字符串模板,比如

尊敬的用户${name}。。。。

里面的${name}就可以替换为用户的用户名。

下面使用正则表达式简单实现一下这个功能:

/**
  * 根据键值对填充字符串,如("hello ${name}",{name:"xiaoming"})
  * 输出:
  * @param content
  * @param map
  * @return
  */
 public static String renderString(String content, Map<String, String> map){
  Set<Entry<String, String>> sets = map.entrySet();
  for(Entry<String, String> entry : sets) {
   String regex = "\\$\\{" + entry.getKey() + "\\}";
   Pattern pattern = Pattern.compile(regex);
   Matcher matcher = pattern.matcher(content);
   content = matcher.replaceAll(entry.getValue());
  }
  return content;
 }

map里存储了键值对,然后获取键值对的集合,遍历集合进行对字符串的渲染

实例测试:

@Test
 public void renderString() {
  String content = "hello ${name}, 1 2 3 4 5 ${six} 7, again ${name}. ";
  Map<String, String> map = new HashMap<>();
  map.put("name", "java");
  map.put("six", "6");
  content = StringHelper.renderString(content, map);
  System.out.println(content);
 }

有两个变量需要替换,namesix,对应的值分别为Java和6,同时name调用了两次。

结果:

hello java, 1 2 3 4 5 6 7, again java. 

总结

以上就是关于Java利用正则表达式实现${name}形式的字符串模板的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

相关文章

  • 详解Mybatis内的mapper方法为何不能重载

    详解Mybatis内的mapper方法为何不能重载

    这篇文章主要介绍了详解Mybatis内的mapper方法为何不能重载,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Spring AOP实现复杂的日志记录操作(自定义注解)

    Spring AOP实现复杂的日志记录操作(自定义注解)

    Spring AOP实现复杂的日志记录操作(自定义注解),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • SpringBoot原生组件注入实现两种方式介绍

    SpringBoot原生组件注入实现两种方式介绍

    SpringBoot是Spring全家桶的成员之一,基于约定优于配置的思想(即有约定默认值,在不配置的情况下会使用默认值,在配置文件下配置的话会使用配置的值)。SpringBoot是一种整合Spring技术栈的方式(或者说是框架),同时也是简化Spring的一种快速开发的脚手架
    2022-10-10
  • MyBatis深入分析数据库交互与关系映射

    MyBatis深入分析数据库交互与关系映射

    这篇文章主要介绍了MyBatis中的数据库交互与关系映射,MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射,MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集,需要的朋友可以参考下
    2024-05-05
  • Java中Klass模型与类加载的详细机制

    Java中Klass模型与类加载的详细机制

    这篇文章主要介绍了Java中Klass模型与类加载的详细机制,java语言是在jvm中运行而jvm是不认识java代码的我们使用javac编译的class文件jvm是不认识的 所以有一个类加载的动作 这个动作就是把class字节码拼装成一个klass类型,需要的朋友可以参考下
    2023-08-08
  • SpringBoot+Mybatis实现登录注册的示例代码

    SpringBoot+Mybatis实现登录注册的示例代码

    这篇文章主要介绍了SpringBoot+Mybatis实现登录注册的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • java实现基于SGIP协议开发联通短信的方法

    java实现基于SGIP协议开发联通短信的方法

    这篇文章主要介绍了java实现基于SGIP协议开发联通短信的方法,涉及java短信发送的相关实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • Java中增强for循环在一维数组和二维数组中的使用方法

    Java中增强for循环在一维数组和二维数组中的使用方法

    下面小编就为大家带来一篇Java中增强for循环在一维数组和二维数组中的使用方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • ImportBeanDefinitionRegistrar手动控制BeanDefinition创建注册详解

    ImportBeanDefinitionRegistrar手动控制BeanDefinition创建注册详解

    这篇文章主要为大家介绍了ImportBeanDefinitionRegistrar手动控制BeanDefinition创建注册详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Java中启动线程start和run的两种方法

    Java中启动线程start和run的两种方法

    start()方法它的作用是启动一个新线程,run()就和普通的成员方法一样,可以被重复调用。接下来通过本文给大家分享Java中启动线程start和run的两种方法,需要的朋友参考下吧
    2017-11-11

最新评论