字符串
用双引号或单引号引起来的部分就是字符串,双引号和单引号意义相同,如果想在字符串中定义双引号或单引号,可以用转义字符。
<#assign str="123" str1="123\"456\'789">
我们知道${name}是一个插值,如果想在字符串中就是想定义这种格式的字符串,而不是是用插值。可以在字符串前加r,表示这个字符串是原生字符串。
<#assign a="${user}">
<#assign b=r"${user}">
注意这两个的区别,上一个是插值,下一个是原生字符串。
字符串可以用+直接拼接
<#assign a="hello ${user}">
<#assign a="hello" + user>
这两种定义方式,含义相同。
获取字符
给定索引值时,可以获取字符串中的某一个字符
<#assign str="abcd">
${str[0]}
字符串切分
用一个值域可以获取字符串的某一部分。
值域的含义如下
start..end
: 包含结尾的值域。比如 1..4
就是 [1, 2, 3, 4]
, 而 4..1
就是 [4, 3, 2, 1];
start..<end
或 start..!end
: 不包含结尾的值域。比如 1..<4
就是 [1, 2, 3]
,4..<1
就是 [4, 3, 2;
start..*length
: 限定长度的值域,比如 10..*4
就是 [10, 11, 12, 13]
,10..*-4
就是 [10, 9, 8, 7];
start..
: 无右边界值域。这和限制长度的值域很像,只是长度是无限的。 比如 1..
就是 [1, 2, 3, 4, 5, 6, ... ]
,直到无穷大。
<#assign s = "ABCDEF">
${s[2..3]}
${s[2..<4]}
${s[2..*3]}
${s[2..*100]}
${s[2..]}
对应的结果是
CD
CD
CDE
CDEF
CDEF
数字
输入不带引号的数字就可以直接指定一个数字, 必须使用点作为小数的分隔符而不能是其他的分组分隔符。 可以使用 -
或 +
来表明符号 (+
是多余的)。 科学记数法暂不支持使用 (1E3
就是错误的), 而且也不能在小数点之前不写0(.5
也是错误的)。
下面的数字都是合法的:0.08
, -5.013
,8
, 008
,11
, +11
请注意,像 08
、 +8
、 8.00
和 8
这样的数值是完全等同的,它们都是数字8。 所以, ${08}
、${+8}
、 ${8.00}
和 ${8}
的输出都是一样的。
布尔值
直接写 true
或者 false
就表示一个布尔值了,不需使用引号。
序列
使用逗号来分隔其中的每个子变量,然后把整个列表放到方括号中。
<#assign list=["a", "b", "c"]>
<#assign list1=[3, list, "b"]>
序列支持用+进行拼接
<#assign list2 = list1 + list>
序列也可以用值域来切分
<#assign list=["a", "b", "c"]>
1、<#list list[0..*2] as i>${i}</#list>
2、<#list list[1..*2] as i>${i}</#list>
3、<#list list[2..*2] as i>${i}</#list>
4、<#list list[3..*2] as i>${i}</#list>
5、<#list list[0..] as i>${i}</#list>
6、<#list list[1..] as i>${i}</#list>
7、<#list list[2..] as i>${i}</#list>
8、<#list list[3..] as i>${i}</#list>
对应的结果
1、ab
2、bc
3、c
4、
5、abc
6、bc
7、c
8、
哈希表
在模板中指定一个哈希表,就可以遍历用逗号分隔开的"键/值"对, 把列表放到花括号内即可。键和值成对出现并以冒号分隔。请注意名字必须是字符串,值可以是任意类型。
<#assign map={"name": "zhangsan", "age":18, "score":[80, 90, 100]}>
从哈希表中检索数据,可以用点也可以用方括号变量名。
${map.name}
${map["age"]}
数学符号
加法:+
减法:-
乘法:*
除法:/
求模 (求余):%
+除了进行数学运算,还能进行拼接,可以是字符串也可以是其他类型
比较符号
判断是否相等==,是否不相等!=,还有>,<,>=,<=。因为< >这两个符号本身也是标签的开始和结束符号,建议使用 lt(<) lte(<=) gt(>) gte(>=)来替代使用,避免解析错误。
逻辑符号
逻辑 或: ||
逻辑 与: &&
逻辑 非: !
逻辑操作符仅仅在布尔值之间有效。
处理不存在的值
当试图访问一个不存在的变量时, FreeMarker 将会报错而导致模板执行中断。
默认值操作符
unsafe_expr!default_expr
或 unsafe_expr!
or (unsafe_expr)!default_expr
或 (unsafe_expr)!
${mouse!"No mouse."}
<#assign mouse="mouse">
${mouse!"No mouse."}
将会输出
No mouse.
mouse
注意这两种写法的区别
${user.name!"no name"}
${(user.name)!"no"}
上面的写法,要求user存在,但是name可以不存在,如果user不存在将会报错。
下面的写法,无论user不存在还是user.name不存在,都将被默认值no取代,不会报错。
不存在值检测操作符
使用形式: unsafe_expr??
或 (unsafe_expr)??
<#if mouse??>
Mouse found
<#else>
No mouse found
</#if>