使用ColdFusion重现这种类似printf的格式的最直接方法是什么?

时间:2011-02-25 17:03:42

标签: coldfusion format

我被投入ColdFusion进行非常简单的任务。应用程序有一些逻辑来显示“帮助代码”(让我们不要进入什么是帮助代码),但是,逻辑是错误的,需要修复。给定一个两个字母的代码,一个1-4位的数字,以及另一个1-2位的数字,我需要像printf调用那样显示它们:

printf("%s%04d%02d", letterCode, bigNumber, smallNumber);

如果您不熟悉printf函数,它会接受格式字符串(第一个参数),并根据给定的格式将其他变量写入其中。 %s表示“写一个字符串”,%d表示“写一个数字”; %0zd表示“写一个数字并用零填充它所以它至少 z 个字符长(所以%04d表示”写一个数字并用零填充它所以它的长度为至少4位数。)

以下是%s%04d%02d的一些示例:

"AD", 45, 12:  AD004512
"GI", 5121, 1: GI512101
"FO", 1, 0:    FO000100

但是,这是我第一次使用ColdFusion,我找不到像printfsprintf这样的内容来格式化字符串。

另一个不再在这里工作的人使用(非工作)循环,我认为使用库代码而不是实际修复循环会更好,因为无论如何我可能需要做类似的事情。

4 个答案:

答案 0 :(得分:8)

<cfset bigNumberPadded = NumberFormat(bigNumber,"0000")>
<cfset smallNumberPadded = NumberFormat(smallNumber,"00")>
<cfoutput>#letterCode##bigNumberPadded##smallNumberPadded#<cfoutput>

或者......按照bpanulla的建议,并由Leigh纠正

<cfset args = ["AD", javacast("int", 45), javacast("int", 12)]>
<cfset output= createObject("java","java.lang.String").format("%s%04d%02d", args) >

答案 1 :(得分:4)

您可以使用NumberFormat填充CF中带前导零的数字。

<cfoutput>#letterCode##NumberFormat(bigNumber, '0000')##NumberFormat(smallNumber, '00')#</cfoutput>

答案 2 :(得分:1)

在支持ColdFusion的Java层中有很多方法可以做到这一点。这是一个Java资源:

http://download.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html

使用CFOBJECT或CreateObject创建所需的Java类实例。

答案 3 :(得分:-1)

我假设您正在向网页显示这些内容?如果是这样,我会使用switch / case语句。既然你说“给两个字母的代码......”,那么一个开关/盒子就可以了。例如:

<cfswitch expression="#twoLetterCode#">
    <cfcase value="aa12348">%s%04d%02d</cfcase>
    <cfcase value="bb23456">%s%05f%01e</cfcase>
    <cfcase value="cc97641">%s%08g%10j</cfcase>
    <cfdefaultcase>%s%04d%02d</cfdefaultcase>
</cfswitch>

或者您可以使用if / else代替。但主要的一点(回答你的问题)是在ColdFusion中你只需输入显示字符(无论是帮助代码,还是文本,或其他)。您不需要使用特殊功能来向页面显示文本。