FreeMarker字符串操作
1.插值(字符串连接)
如果要在字符串中插入表达式的值,可以在字符串的文字中使用${…} (#{…} ) 。
${…}的作用和在文本区的是相同的。假设用户是” Big Joe”,看下面的代码:
${“Hello ${user}!”}
${“${user}${user}${user}${user}”}
将会打印如下内容:
Hello Big Joe!
Big JoeBig JoeBig JoeBig Joe
另外,也可以使用+号来达到类似的效果,这是比较老的方法,也叫做字符串连接。示
例如下:
${“Hello ” + user + “!”}
${user + user + user + user}
这样打印的效果和多次使用${…}是一样的。
警告:
使用者在使用插值时经常犯的一个错误是:在不能使用插值的地方使用了它。插值只能
${“Hello ${user}!”}
${“${user}${user}${user}${user}”}
Hello Big Joe!
Big JoeBig JoeBig JoeBig Joe
${“Hello ” + user + “!”}
${user + user + user + user}
在 文本 区段 ( <h1>Hello ${name}!</h1> ) 和字符串文字( <#include
“/footer/${company}.html”> ) 中 使 用 。 一 个 典 型 的 错 误 使 用 是 <#if
${isBig}>Wow!</#if> ,这是语法上的 错误 。 只 能 这 么 来 写 : <#if
isBig>Wow!</#if>,<#if “${isBig}”>Wow!</#if> 来写也是错误的。因为
if 指令的参数需要的是布尔值,而这里是字符串,那么就会引起运行时的错误。
2.获取一个字符
在给定索引值时可以获取字符串中的一个字符,这和 3.3.4.3 节中从序列检索数据是相
似的,比如 user[0]。这个操作执行的结果是一个长度为 1 的字符串,FTL 并没有独立的
字符类型。和序列中的子变量一样,这个索引也必须是数字,范围是从 0 到字符串的长度,
否则模板的执行将会发生错误并终止。
由于序列的子变量语法和字符的 getter 语法冲突,那么只能在变量不是序列时使用字符
的 getter 语法(因为 FTL 支持多类型值,所以它是可能的) ,这种情况下使用序列方式就比
较多。(为了变通,可以使用内建函数 string,比如 user?string[0]。不必担心你
不理解这个含义,内建函数将会在后续章节中讨论。)
看一个例子(假设 user 是”Big Joe”)
${user[0]}
${user[4]}
将会打印出(注意第一个字符的索引是 0):
B
J
注意:
可以按照切分序列 的方式来获取一定范围内的字符,比如${user[1..4]} 和
${user[4..]}。然而现在这种使用方法已经被废弃了,作为它的替代,可以使用内建
函数 substring。
声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 嗅谱网
转载请注明:转自《FreeMarker字符串操作》
本文地址:http://www.xiupu.net/archives-4687.html
关注公众号:
微信赞赏
支付宝赞赏