有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Freemarker:选择字符串中字符的最后一个实例

所以我有一个字符串,类似于“first-second-third-100201”。我想选择最后一个-并将其替换为/

如果我想替换第一个实例,我可以这样做

<#assign string = "first-second-third-100201 />
${string?replace("-","/","f"}

将“f”作为第一个参数传递给第三个参数。然而,Freemarker似乎没有类似的“last”内置程序来选择破折号的最后一个实例

有没有人有过用regex模拟这种内置功能的经验,或者知道如何做到这一点?谢谢

编辑:

这很难看,但从技术上讲是可行的

<#assign first = "first-second-third-100201" >
<#assign last = first?last_index_of('-')>
<#assign last_replace = first?substring(0, last + 1) />
<#assign permalink_beg = first?substring(0, last) />
<#assign permalink_end = first?replace(last_replace, '/') >
${permalink_beg}${permalink_end}

计算结果为第一第二第三/100201

还有谁有更简单/更优雅的解决方案吗


共 (2) 个答案

  1. # 1 楼答案

    可以将正则表达式用于捕获组:

    <#assign string="first-second-third-100201" />
    ${string?replace("-([^-]*)$", "/$1", "r")}
    

    输出为first-second-third/100201

    在正则表达式中,([^-]*)捕获最后一个-之后的子字符串。在替换字符串中,$1被捕获组的值替换

  2. # 2 楼答案

    试试这个:

    ${string?replace("-"," ")?word_list?last}