You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FreeMarker如何实现多组逗号分隔数据按索引配对逐行输出

FreeMarker 实现两类逗号分隔列表按索引配对排版

实现思路

直接在FreeMarker模板层完成字符串拆分、空格清理、按索引配对、排版控制即可,不需要提前在业务代码层预处理数据。核心逻辑是把两个逗号分隔的字符串拆成序列后,按下标对齐取值,同时控制组间空行不要在末尾输出多余空白。

可直接使用的模板代码

<#-- 拆分输入字符串为列表,同时清理每个元素前后的多余空格 -->
<#assign nameList = ListingName?split(",")?map(item => item?trim)>
<#assign addressList = ListingAddress?split(",")?map(item => item?trim)>

<#-- 取两个列表的最小长度作为循环次数,兼容长度不一致的场景避免索引越界 -->
<#assign loopSize = nameList?size min addressList?size>

<#list 0..<loopSize as idx>
${nameList[idx]}
${addressList[idx]}
<#-- 非最后一组时输出空行做分隔 -->
<#if idx?has_next>

</#if>
</#list>

兼容旧版本FreeMarker的写法

如果使用的FreeMarker版本低于2.3.29,不支持?map高阶函数,可以把清理空格的逻辑放到取值时处理,代码如下:

<#assign nameList = ListingName?split(",")>
<#assign addressList = ListingAddress?split(",")>
<#assign loopSize = nameList?size min addressList?size>

<#list 0..<loopSize as idx>
${nameList[idx]?trim}
${addressList[idx]?trim}
<#if idx?has_next>

</#if>
</#list>

若所用FreeMarker版本不支持..<右开区间语法,将循环范围替换为0..loopSize-1即可,渲染效果无差异。

效果验证

传入题目给出的示例输入:

  • ListingName = "abhay, hkm, Himanshu"
  • ListingAddress = "Delhi, Noida, Agra"

模板渲染后输出结果完全匹配要求:

abhay
Delhi

hkm
Noida

Himanshu
Agra

内容的提问来源于stack exchange,提问作者Himanshu Kumar Maurya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 03:49:12