仅替换 freemarker 中字符串中单词的最后一个实例
Replacing only the last instance of a word in a string in 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
我正在尝试解析支票上的文本。我需要替换最后一个 '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