美文网首页
freemarker 批量文本替换及常用语法

freemarker 批量文本替换及常用语法

作者: 饱饱想要的灵感 | 来源:发表于2022-06-29 20:54 被阅读0次

文本替换

  1. 直接替换内存中的字符串, 可动态设置通知内容
    @Test
    public void templateTest() {
        Map<String, Object> model = Maps.newHashMap();
        model.put("季节", "春");
        model.put("花名", "桃花");
        model.put("作者", "李白");

        String sourceCode = "${季节}夜宴从弟${花名}园序\n" +
                "${作者}〔唐代〕\n" +
                "  夫天地者万物之逆旅也;光阴者百代之过客也。而浮生若梦,为欢几何?\n" +
                "古人秉烛夜游,良有以也。况阳${季节}召我以烟景,大块假我以文章。\n" +
                "会${花名}之芳园,序天伦之乐事。\n" +
                "群季俊秀,皆为惠连;吾人咏歌,独惭康乐。\n" +
                "幽赏未已,高谈转清。开琼筵以坐花,飞羽觞而醉月。\n" +
                "不有佳咏,何伸雅怀?如诗不成,罚依金谷酒数。";

        try (StringWriter out = new StringWriter()){
            Configuration configuration = new Configuration(Configuration.VERSION_2_3_0);
            Template template = new Template("我是一个可爱的模板名称", sourceCode, configuration);
            template.process(model, out);
            System.out.println(out.toString());
        } catch (TemplateException e) {
            System.out.printf("${%s}设置有误,请检查", e.getBlamedExpressionString());
            e.printStackTrace();
        }catch (IOException e) {
            e.printStackTrace();
        }
    }
  1. 读取模板文件生成新的文件, 可用于实现自动生成代码
    @Test
    public void templateFileTest() {
        // 项目路径
        String projectPath = new File("").getAbsolutePath();
        try {
            // 1.创建一个Configuration对象,直接new一个对象。构造方法的参数就是FreeMarker对于的版本号。
            Configuration configuration = new Configuration(Configuration.getVersion());
            // 2.设置模板文件所在的路径。
            configuration.setDirectoryForTemplateLoading(new File(projectPath + "/ftls/source"));
            // 3.设置模板文件使用的字符集。一般就是utf-8.
            configuration.setDefaultEncoding("utf-8");
            // 5.加载一个模板,创建一个模板对象。
            Template template = configuration.getTemplate("hello.ftl");
            // 6.创建一个模板使用的数据集,可以是pojo也可以是map。一般是Map。
            Map<String, Object> dataModel = new HashMap<>();
            dataModel.put("hello", "我想输出一种能量");
            // 7.创建一个Writer对象,一般创建一FileWriter对象,指定生成的文件名。
            Writer out = new FileWriter(new File(projectPath + "/ftls/target/" + template.getSourceName().replace(".ftl", ".txt")));
            // 8.调用模板对象的process方法输出文件。
            template.process(dataModel, out);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (TemplateException e) {
            System.out.printf("${%s}设置有误,请检查", e.getBlamedExpressionString());
            e.printStackTrace();
        }
    }

maven依赖

<dependency>
  <groupId>org.FreeMarker</groupId>
  <artifactId>FreeMarker</artifactId>
  <version>2.3.29</version>
</dependency>

常用语法

定义变量

<#assign name1=value1 name2=value2 ... nameN=valueN>

<#assign name>
capture this
</#assign>

取值
${value}

空判断和集合对象遍历

<#if users??>
    <#list userList as user>
    第${user_index+1}个用户用户名:${user.userName},密码:${user.userPassword},年龄: ${user.age}
</#list>
<#else>
    ${user!"变量为空则给一个默认值"}
</#if>

比较运算符
FreeMarker 大于号>、小于号 <的使用 :与标签括号<>冲突的问题

解决方法:
1、用符号代替,例如:> gt,>= gte,< lt,<= lte
2、加括号 <#if(x>y)>

内建函数
FreeMarker在解析数据格式的时候,自动默认将数字按3为分割(1,000)
可在模板中加入<#setting number_format="#">或者<#setting number_format="0">取消自动分割
分割语法解析:

例如:"0.#",左边的'0'的个数代表整数部分最少为多少位,右边'#'的个数代表小数部分最多为多少位。

例如:",##0.0#" 表示整数部分的千位分割符是',',小数部分最多保留两位,最少保留一位;例如:"0.##%"以百分比的形式表示,小数部分最多两位。

假设strnum是一个数字,则可以这样写{strnum?string(",##0.0#")},例如{123456.123456?string(",##0.0#")}值为123,456.12

转化为纯数字形式: ${"123,456.123,456"?c}

<#assign data = "abcd1234">
第一个字母大写:${data?cap_first}
所有字母小写:${data?lower_case}
所有字母大写:${data?upper_case}

<#assign floatData = 12.34>
数值取整数:${floatData?int}
获取集合的长度:${users?size}
时间格式化:${dateTime?string("yyyy-MM-dd")}

<#assign tempNum=20>
${tempNum}    
${tempNum?string.number}或${tempNum?string("number")}  //结果为20
${tempNum?string.currency}或${tempNum?string("currency")} //结果为¥20.00
${tempNum?string. percent}或${tempNum?string("percent")} //结果为2,000%

<#--FreeMarker中的round、floor和ceiling数字的舍入处理-->
<#--round:四舍五入-->
<#--floor:向下取整-->
<#--ceiling:向上取整-->
<#assign numList = [12,0.23,89,12.03,69.56,45.67,-0.56,-8.05,-89.56,4.69]/>
<#list numList as num>
 ${num} ?round=${num?round} ?floor=${num?floor} ?ceiling=${num?ceiling}
</#list>

Map对象遍历

 <#assign mapData={"name":"饱饱", "dream":"蝴蝶"}>
直接通过Key获取 Value值:${mapData["name"]}
通过Key遍历Map:
<#list mapData?keys as key>
    Key: ${key} - Value: ${mapData[key]}
</#list>
通过Value遍历Map:
<#list mapData?values as value>
    Value: ${value}
</#list>

算术运算

<#assign a=100 b=30>
"+" : ${a + b}
"-" : ${a - b}
"*" : ${a * b}
"/" : ${a / b}
"%" : ${a % b}

相关文章

  • linux下批量查找/替换文本内容

    linux下批量查找/替换文本内容 一般在本地电脑上批量替换文本有许多工具可以做到,比如sublime text ...

  • mysql常用操作

    1.批量替换某个值 2. 日期常用

  • iOS批量替换XIB字体

    批量文本替换, 所有场景可用 此例用来批量替换iOS XIB中的字体 iOS中XIB内的字体搜索出来是"展示样式"...

  • 批量替换文本

    批量替换文本 用途 浏览器会缓存js文件,如果只更新js文件时,需要浏览器清除缓存才会获取更新后的文件,所以需要在...

  • HTML常用标签及属性

    什么是HTML HTML基本语法 常用标签及属性 链接 文本标记 表格 列表 表单 结构标记 本文知识来源MDN(...

  • sed+正则表达式 替换文本文件

    使用sed + 正则表达式批量匹配并替换文本内容 创建文件 text.txt 替换 「world」为 Moto 替...

  • HTML常用标签及属性

    什么是HTML HTML基本语法 常用标签及属性 链接 文本标记 表格 列表 表单 结构标记 什么是HTML HT...

  • sed常用文本操作-文本替换

    0 sed语法介绍 数据的搜寻并替换 1 测试文件准备 test.txt测试文件: 2 删除所有行的前N个字符 s...

  • Linux之vim操作

    简单替换 替换的文本中不包含/:%s需要替换的文本替换的文本 替换的文本中包含/:%s需要替换的文本替换的文本RG...

  • linux中的正则表达式总结

    概念 Regular Expression,通常用来检索、替换那些符合某个模式(规则)的文本。 基本正则 常用匹配...

网友评论

      本文标题:freemarker 批量文本替换及常用语法

      本文链接:https://www.haomeiwen.com/subject/hhkqbrtx.html