Freemarker:重新格式化字符串

时间:2016-01-31 17:48:59

标签: string freemarker

我有一个Freemarker变量,可以包含如下字符串:

myFirstStringExample
mySecondStringExample
myABCStringExample
myExample

我需要删除最终的'示例'这将是任何可能的字符串。 我想最终得到以下字符串:

My First String
My Second String
My ABC String
My

有一种简单的方法吗?

2 个答案:

答案 0 :(得分:2)

这是一个算法问题,而不是FreeMarker问题,但是你走了:

<#function camelCaseToCapWordsButLast(s)>
  <#return s
      <#-- "fooBar" to "foo bar": -->
      ?replace('([a-z])([A-Z])', '$1 $2', 'r')
      <#-- "FOOBar" to "FOO Bar": -->
      ?replace('([A-Z])([A-Z][a-z])', '$1 $2', 'r')
      <#-- and the easy part: -->
      ?cap_first?keep_before_last(' ')
  >
</#function>

${camelCaseToCapWordsButLast('myFirstStringExample')}
${camelCaseToCapWordsButLast('mySecondStringExample')}
${camelCaseToCapWordsButLast('myABCStringExample')}
${camelCaseToCapWordsButLast('myExample')}

答案 1 :(得分:0)

我设法得到了这样的东西:

<#assign test="myFirstStringExample" />
<#assign first=test?matches("([a-z]+).*")?groups[1]?cap_first />
<#assign words=test?matches("([A-Z][a-z]*)") />
${first} <#list words as word><#if word?has_next>${word} </#if></#list>

它不仅适用于myABCStringExample