Замена только последнего экземпляра слова в строке в freemarker - PullRequest
1 голос
/ 07 февраля 2020

Я пытаюсь разобрать текст, который идет на проверку. Мне нужно заменить последний «у» и добавить вместо него «песо кон». Первоначально я пытался разбить строку на «у» и присоединиться, но оказывается, что может быть более одного «у», когда записанное число имеет «у», как:

'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', я просто скопировал символ.

К сожалению, индексация не работает должным образом, потому что я не могу заставить ее напечатать с «песо кон» в правильном месте. Как это можно улучшить, чтобы реализовать эту логику c?

    <#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>

1 Ответ

2 голосов
/ 08 февраля 2020

Я придумал это решение:

<#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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...