怎样利用模板拼接字符串

来源:互联网 发布:windows查看内存型号 编辑:程序博客网 时间:2024/05/22 02:01

  近期的项目里在做消息的模块,负责系统内容的各种消息。有些消息的格式是固定的,每次改变的只是用户名等固定的几个字段。为了方便的维护这些消息,我们系统采用消息模板来实现。

  例如:“尊敬的 #username# 您好,您购买的《#bookname#》交易成功!”

  我们只要维护这个模板即可。那么发消息时,怎么将消息替换成相应的字段呢?对于不同的模板,有多个不同的参数该怎么办?

  和消息相关的表有两张,一张是消息类型,一张是消息记录。

  首先,我们需要从消息类型表查找到消息的模板,比如购买消息的模板:“尊敬的 #username# 您好,您购买的《#bookname#》交易成功!”

  接着,我们可以根据传入的参数对变量进行替换,这里用map存放参数.


controller代码:

//参数1.消息模板名称String messageTypeName="购买";//参数2.要传入的字段Map<String,String> map = new HashMap<String,String>();map.put("username", "张三");map.put("coursename", "JSP应用开发与实践");//参数3.接收消息的idString receiveMessageId="UWUi4B6Z93h1nr4NiM19k4";//参数4.发送消息的idString sendMessageId="UWUi4B6Z93h1nr4NiM19k4";
<span style="white-space:pre"></span>//方法调用<span style="white-space:pre"></span>messageRecordBean.saveMessageRecord(messageTypeName, map, receiveMessageId, sendMessageId);


service实现:

//获取模板内容【查询方法略】String messageTemplate=messageType.getMessageTemplate();//获取map集合中的所有键,存入到Set集合中,          Set<Map.Entry<String,String>> entry = map.entrySet();         //通过迭代器取出map中的键值关系        Iterator<Map.Entry<String,String>> it = entry.iterator();         while (it.hasNext())          {              //将键值关系取出存入Map.Entry这个映射关系集合接口中              Map.Entry<String,String>  me = it.next();              //获取键值,进行替换              messageTemplate=messageTemplate.replaceAll("#"+me.getKey()+"#", me.getValue());        }         //3.添加到消息实体MessageRecord messageRecord=new MessageRecord();messageRecord.setMessageRecordContent(messageTemplate);messageRecord.setMessageTypeId(messageType.getId());messageRecord.setReceiveMessageId(receiveMessageId);messageRecord.setSendMessageId(sendMessageId);messageRecord.setIsRead(0);//成功返回true,否则返回falsetry {messageRecordEao.saveGeneric(messageRecord);return true;} catch (Exception e) {e.printStackTrace();}return false;

  主要的实现思路:使用map存放变量值,使用迭代器将模板中的变量替换为对应的map值。然后将获取的值保存到消息记录里。

  业务虽然不是很难,但是通过自己的思考一步一步把它实现,心里特别的开心!


0 0