基于FreeMarker实现以NEFT开头的字符串特定规则处理
解决方案
需求说明
现有变量 X = "NEFT INDBN12025089250 WHISTLE SOLUTIONS LLP INDB0",需输出结果:NEFT INDBN12025089250 WHISTLE SOLUTIONS LLP INDB0 INDBN12025089250,需满足:
- 仅当字符串以
NEFT开头时执行该操作 - 禁止使用子串截取(因
INDBN开头的字段长度不固定)
可行代码(FreeMarker语法)
<#assign X = "NEFT INDBN12025089250 WHISTLE SOLUTIONS LLP INDB0"> <#if X?starts_with("NEFT")> <#assign parts = X?split(" ")> ${X} ${parts[1]} </#if>
代码说明
- 用
?starts_with("NEFT")判断字符串开头,仅满足条件时执行后续逻辑 - 通过
?split(" ")将原字符串按空格分割为数组,parts[1]即为INDBN开头的字段(无需关心其长度) - 直接拼接原字符串与目标字段,得到最终输出
你尝试过的示例翻译及问题说明
示例1
<#assign TXN_DESC_1="NEFT INDBN12025089250 WHISTLE SOLUTIONS LLP INDB0"?split(" ")> ${TXN_DESC_1[0]} ${TXN_DESC_1[1]} ${TXN_DESC_1[2]} ${TXN_DESC_1[3]} ${TXN_DESC_1[4]} ${TXN_DESC_1[5]} ${TXN_DESC_1[1]}
问题:手动拼接数组元素,若原字符串的空格分隔元素数量变化(比如多一个或少一个),代码会直接报错,扩展性差。
示例2
x = "NEFT INDBN12025089250 WHISTLE SOLUTIONS LLP INDB0" <#list x?split(r'\s*,\s*''r') as x> ${x} </#list>
问题:分割规则错误(用逗号而非空格分割),且语法存在问题,无法正确提取目标字段。
内容的提问来源于stack exchange,提问作者Shivam Bhatt
相关产品推荐
相关产品推荐

