string - 仅替换freemarker中字符串中单词的最后一个实例
问题描述
我正在尝试解析检查中的文本。我需要替换最后一个“y”并添加“pesos con”。我最初试图在'y'处拆分字符串并加入,但事实证明,当写出的数字有一个'y'时,可能有多个'y',例如:
'cien mil seiscientos cincuenta y ocho y 01/100'
期望的结果应该是:'cien mil seiscientos cincuenta y ocho pesos con 01/100'
我尝试在每个字符处拆分字符串 (?split('')),然后从字符串的末尾数到第二个 'y' 所在的索引,因为它应该始终与字符串末尾的距离相同。
然后,当我将每个字符复制到一个新字符串时,我迭代了拆分字符串。如果索引等于最后一个'y'(长度为7)的索引,我将'pesos con'添加到新字符串而不是元素'y'。如果索引不是最后一个'y'的索引,我只是复制了字符。
不幸的是,索引似乎没有按预期工作,因为我似乎无法在正确的位置使用“pesos con”打印它。如何改进以实现此逻辑?
<#function removeY>
<#list records as check>
<#assign str = ''>
<#assign totalWordsArr = check.totalwords?split("")>
<#list totalWordsArr as x>
<#if x?index != x?length-7>
<#assign str = str + " " + x + " ">
<#elseif x?index ==x?length-7>
<#assign str = " " + str + " " + 'pesos con '>
</#if>
</#list>
<#return str>
</#list>
</#function>
解决方案
我想出了这个解决方案:
<#assign x="cien mil seiscientos cincuenta y ocho y 01/100">
${x?keep_before_last(" y ")} pesos con ${x?keep_after_last(" y ")}
这带来了您需要的结果:
cien mil seiscientos cincuenta y ocho pesos con 01/100
推荐阅读
- javascript - 如何在vue中动态附加输入元素
- javafx - 如何在 JavaFX 8 中使用时间微调器?
- jupyterhub - 如何使用帮助程序包?
- javascript - 如何创建订单汇总组件
- mysql - 根据输入(如“otb”到“bot”)创建单词
- mysql - 在交易中更新和选择,无法获取数据
- node.js - Cannot connect to database The `uri` parameter to `openUri()` must be a string, got "undefined"
- jenkins - 由于 OOM-Kill,Jenkins 没有在 redhat linux 中启动
- r - 在管道中使用 bind_rows
- css - 将多个 CSS 动画合并为一个