开发过程中,会涉及到文案展示的动作。这些文案可能需要从持久化或者程序处理过程中的内容来进行展示。最蛋疼的事情,由于其中文案的变动性或者设计问题,导致这些文案在程序的各个位置,通过各种stringbuffer、stringbuilder甚至直接各种 "" + "" 之类的拼接,导致程序千疮百孔,不够“优雅”不说,后面维护的成本简直不谈了。

其实大部分情况下,文案如果不涉及到需要根据持久化数据活着计算的数据进行展示的话,其实是可以很简单提到一个配置中心去,数据库也罢、配置文件也罢,甚至类似zookeeper之类的中间件也都可以。但是如果需要根据某些数据实时替换里面的内容,那就显得费劲了。

我们知道Java提供了一个叫做MessageFormat的类,里面直接format一些一些固定格式。比如我们定义一句话叫做:满{0}减{1}元,然后我们传入给你MessageFormat.format一个数组,数组的内容是:{100,10},于是我们可以根据MessageFormat获得文案为:满100减10元。

其实这个是比较简单和易于理解的,我们只需要在程序中把需要动态生成的内容填充到一个数组中,然后将文案配置在另外一个位置,然后不停的调用MessageFormat去获得需要的文案,这样子也可以。然而这种做法有一个问题,就是数组的含义不明确,严重依赖填入顺序,同时在外面配置文案的时候也并不明白那个0或者1到底是个什么东西。

既然我们知道哪些地方该填充什么内容,其实不如我们整理系统所有文案,然后抽象和公用一些关键词,通过约定的关键词填充在文案中,与此同时,程序里面将数组的结构转换为Map结构,map的key就是这些关键词,value就是刚才数组的内容了。如此我们可以摆脱对于数组顺序的要求,同时文案的配置也可以从开发同学的手中转移到PM甚至运营同学的手中。

然而我们还需要确定这种方案的性能以及可用性,于是我们可以做一个实验:

import com.google.common.base.Stopwatch;
import org.apache.commons.lang3.StringUtils;import java.text.MessageFormat;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** created by @author <a href="mailto:congshaogang@meituan.com">Shaogang Cong</a> on 16/5/31.*/
public class EffiencyTest {private static String aaa = "满{sum}元减{credit}元,在线支付再减{cre1},限{start}到{endtime}";private static String aaa1 = "满{0}元减{1}元,在线支付再减{2},限{3}到{4}";static Object[] aaa1Array = {100, 19, 20, "23:30", "23:45"};static Map<String, Object> parameterMap = new HashMap<String, Object>();static {parameterMap.put("sum", 100);parameterMap.put("credit", 19);parameterMap.put("cre1", 20);parameterMap.put("start", "23:30");parameterMap.put("endtime", "23:45");}public static void main(String[] args) {Stopwatch stopwatch = Stopwatch.createStarted();for (int i = 0; i < 100000; i++) {MessageFormat.format(aaa1, aaa1Array);}System.out.println("messageformat" + stopwatch.elapsed(TimeUnit.MILLISECONDS));String patternString = "\\{(" + StringUtils.join(parameterMap.keySet(), "|") + ")\\}";System.out.println(patternString);stopwatch.reset();stopwatch.start();Pattern pattern = Pattern.compile(patternString);for (int i = 0; i < 100000; i++) {Matcher matcher = pattern.matcher(aaa);StringBuffer sb = new StringBuffer();while (matcher.find()) {matcher.appendReplacement(sb, parameterMap.get(matcher.group(1)).toString());}matcher.appendTail(sb);System.out.println(sb.toString());}System.out.println("pattern" + stopwatch.elapsed(TimeUnit.MILLISECONDS));}}

执行结果:

messageformat910
\{(endtime|start|sum|cre1|credit)\}
pattern229

我们会发现,Map的方式不但容易理解,而且效率要远高于messageformat的方式。同时,我们完全可以做到正则表达式里面的pattern提前compile 暂存起来,如果确实有变化,还可以通过刷新缓存的方式进行更新。

最后,我们讲Map中的key统一到一个常量类活着其他结构中,供开发、产品或者运营童鞋使用即可了。

转载于:https://www.cnblogs.com/congsg2016/p/5568357.html

项目展示文案生成设计相关推荐

  1. PIX入选Autodesk硅谷技术中心,以生成设计和金属增材制造落地L4自动驾驶通用底盘

    从高性能赛艇到装配式摩天大楼,从穿戴机器人到火星着陆器,从3d打印假肢到喷气式发动机叶片- 这里是Autodesk技术中心,在全球4座城市拥有顶尖数字工厂,汇聚这个星球上最具创新力的领袖.思想家.企业 ...

  2. 4个可以写进简历的京东NLP项目:医疗分诊、营销文案生成、商品图谱、对话系统...

    想成为NLP工程师,但是否因为没有实际项目经历而发愁?是否希望丰富简历中的项目经验,从而提高面试的通过率?是否想尝试有技术含量的项目,以后为进大厂而准备? 这就是我们实战训练营的初衷. 京东智联云联合 ...

  3. 【HelloKitty团队项目】Alpha阶段项目展示

    项目 内容 这个作业属于哪个课程 2023北航软件工程 这个作业的要求在哪里 团队项目-Alpha阶段项目展示 我在这个课程的目标是 学习软件工程技术,完成团队开发流程 这个作业在哪个具体方面帮助我实 ...

  4. 【HelloKitty团队项目】Beta阶段项目展示

    项目 内容 这个作业属于哪个课程 2023北航软件工程 这个作业的要求在哪里 团队项目-Beta阶段项目展示 我在这个课程的目标是 学习软件工程技术,完成团队开发流程 这个作业在哪个具体方面帮助我实现 ...

  5. ChatGPT 助力智能文案生成

    当前各大电商互联网平台上拥有海量的商品数据,为商品撰写一个精准且具有吸引力的标题文案,对于业务场景的转化以及用户使用体验的提升都有极大帮助.然而由于商品库规模庞大,人工运营编写商品文案的成本太高,并且 ...

  6. AI大牛周明打造的轻量“孟子模型”开源!靠10亿参数冲上CLUE榜第三,可用于新闻分类、文案生成...

    明敏 发自 凹非寺 量子位 报道 | 公众号 QbitAI 只用10亿参数就杀进中文自然语言理解CLUE榜单前三的孟子模型,现在开源了! 其打造团队澜舟科技-创新工场最新宣布,基于孟子通用模型,他们将 ...

  7. 淘宝Push智能文案生成

    本文主要介绍了2021年笔者在智能文案生成项目所做的工作. 业务背景 Push是淘宝重要促活手段之一,运营同学通过投放各类营销.产品Push以达到唤端.促活目的.Push素材通常由人群.商品或者活动. ...

  8. Okidoki - Alpha阶段项目展示 - TEAM LESS ERROR

    如果您在寻找我们的Alpha阶段演示文稿,请点击 此处 . 如果您在寻找我们的Demo视频,请点击此处. Okidoki - Alpha阶段项目展示 项目管理 团队成员简介 项目管理方法 分工协作 沟 ...

  9. Okidoki - Beta阶段项目展示 - TEAM LESS ERROR

    如果您在寻找我们的Beta阶段演示文稿,请点击 此处 . 如果您在寻找我们的Beta阶段Demo视频,请点击此处. Okidoki - Beta阶段项目展示 项目管理 团队成员简介 项目管理方法 分工 ...

最新文章

  1. 机器学习PAI产品架构
  2. python 判断字母大小写
  3. HTML 怎么修改,怎么修改HTML
  4. python的全局变量能暂存数据吗_【Python】Python之全局变量
  5. Error while retrieving the leader gateway. Retrying to connect to akka.tcp://flink@laptop:xxxx
  6. Win11提示无法安装程序怎么办 Win11提示无法安装程序的解决方法
  7. 细谈getRequestDispatcher()与sendRedirect()的区别
  8. MongoDB:MapReduce基础及实例
  9. 用python导出pptx中每一页的标题
  10. javascript+Java 实现MD5加密登录密码
  11. 接口测试-jmeter
  12. 小超市的大梦想,京东的梦醒时分
  13. 电脑图标变成白纸如何恢复
  14. 软件工程的23种设计模式
  15. 微型计算机自动化控制专业,自动化专业简介
  16. 广州大学机器学习与数据挖掘实验一:线性回归
  17. 智慧城市将成为推进我国新型城镇化的新思路、新手段、新模式
  18. jBox----弹出层插件
  19. Burpsuite介绍及2022.8.2版本超详细安装教程(图文版)
  20. Kubectl debug 调试容器

热门文章

  1. notepad++ java编码,输出中文字符时,编译出错
  2. ios--用证书进行真机调试(转)
  3. linux 下 将 shell script 与 一个桌面图标联系在一起 (2)
  4. MQTT初始篇笔记整理
  5. 日志——Vue.js开发在线简历生成器
  6. python-作用域
  7. 老李分享:HTTP协议之请求和响应
  8. 使用selector修改TextView中字体的颜色
  9. 关于算法中的并查集,写的很有意思,转过来看看~
  10. 飓风“桑迪”路径图的制作