如何在FreeMarker中生成数字序列与字母序列
FreeMarker 生成数字序列与字母序列实现方案
生成数字序列
FreeMarker内置了直接生成数字序列的语法,无需自定义工具类:
- 连续数字序列(步长为1)
使用..操作符即可生成指定区间的连续数字,支持正序、倒序生成:
<#-- 正序生成1到10的数字序列 --> <#list 1..10 as num> ${num} </#list> <#-- 倒序生成10到1的数字序列 --> <#list 10..1 as num> ${num} </#list>
- 自定义步长数字序列
使用内置range函数实现自定义步长,函数格式为range(起始值, 结束边界, 步长),注意生成的序列不包含结束边界:
<#-- 生成1、3、5、7、9的奇数序列,步长为2,结束边界填11即可覆盖到10以内的最大值 --> <#list range(1, 11, 2) as num> ${num} </#list>
生成字母序列
FreeMarker没有内置的字母序列生成语法,可以通过ASCII码转换的方式实现:
- 基础字母序列生成
利用字符和ASCII码的互转内置函数,先生成对应ASCII码的数字序列,再转换为字符即可:
<#-- 生成a到z的小写字母序列,a对应ASCII码97,z对应122 --> <#list 97..122 as asciiCode> ${asciiCode?char} </#list> <#-- 生成A到Z的大写字母序列,A对应ASCII码65,Z对应90 --> <#list 65..90 as asciiCode> ${asciiCode?char} </#list>
- 自定义区间字母序列
无需手动记忆ASCII码,通过?int内置函数直接把字符转为对应ASCII码即可定义区间:
<#-- 生成c到m的小写字母序列 --> <#assign startCode = 'c'?int> <#assign endCode = 'm'?int> <#list startCode..endCode as asciiCode> ${asciiCode?char} </#list>
- 自定义步长字母序列
结合range函数实现间隔取值:
<#-- 生成A、C、E...等间隔的大写字母序列 --> <#list range(65, 91, 2) as asciiCode> ${asciiCode?char} </#list>
注意事项
range函数的结束边界不包含在生成的序列内,如需覆盖到目标最大值,需将结束边界设置为目标最大值+1- ASCII码转字符使用
?char内置函数,字符转ASCII码使用?int内置函数 - 2.3.22以下版本的FreeMarker不支持
range函数的步长参数,如需使用该特性请升级到最新稳定版
内容的提问来源于stack exchange,提问作者Big Bansal
相关产品推荐
相关产品推荐

