如何检查字符串是否可转换为数字

How do I check if a string is convertable to a number

在 freemarker 中,我有一个宏 myfunc 执行以下操作:

<#macro myfunc x>
  <#attempt>
    <#assign x=(x?number)>
  <#recover>
  </#attempt>
  ${x!''}
</#macro>

所以,本质上,如果 x(以字符串开头)并且可以转换为数字,那么我想将它包装在 (${x}) 中,否则只显示值。

除了它附带的难看的 <#attempt> 错误日志记录外,我对这个解决方案很好。

似乎没有一种简单的方法可以在不使用 <#attempt> 的情况下检查字符串是否可以转换为数字,或者我的研究步履蹒跚——我也不想在 Java 方面,因为我将其视为视图代码,不属于我的模型代码。有人知道吗?

您可以使用正则表达式:

<#if x?matches("\d+")>
    // do something with x?number
<#else>
    // do something with x
</#if>