如何在Freemarker模板中将长字符串按34字符长度拆分?
在Freemarker模板中按固定长度拆分长字符串
要在Freemarker里把长字符串按每34个字符拆分,直接用模板自带的字符串内建函数结合循环指令就能实现,不需要额外工具类。
实现步骤与代码示例
假设原字符串存在变量longStr中,拆分长度设为34,完整模板代码如下:
<#assign longStr = "1234567890**A**234567890**B**234567890**C**234567890**D**234567890**E**234567890**F**234567890**G**234567890**H**234567890**I**234567890**J**234567890**K**234567890**L**234567890**M**234567890" /> <#assign splitLength = 34 /> <#assign totalLength = longStr?length /> <#assign segments = [] /> <#list 0..<(totalLength + splitLength - 1)?intdiv(splitLength) as index> <#assign start = index * splitLength /> <#assign end = (index + 1) * splitLength /> <#if end > totalLength> <#assign end = totalLength /> </#if> <#assign segments = segments + [longStr?substring(start, end)] /> </#list> <!-- 输出用空格分隔的拆分结果 --> ${segments?join(" ")}
代码说明
- 变量初始化:定义原字符串、拆分长度,计算字符串总长度,同时创建空列表存拆分后的分段。
- 循环分段截取:通过
#list遍历所有分段索引,每次计算当前段的起止位置:- 起始位置为
索引×拆分长度 - 结束位置为
(索引+1)×拆分长度,若超过字符串总长度则取总长度 - 用
?substring(start, end)截取当前段并加入列表
- 起始位置为
- 结果拼接输出:用
?join(" ")把列表中的分段用空格连接,得到目标格式。
示例输出结果
运行代码后,输出与预期完全一致:
1234567890**A**234567890**B**234567890**C**234 567890**D**234567890**E**234567890**F**2345678 90**G**234567890**H**234567890**I**234567890**J**2 34567890**K**234567890**L**234567890**M**23456 7890
内容的提问来源于stack exchange,提问作者Shivam Bhatt
相关产品推荐
相关产品推荐

