我被投入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,我找不到像printf
或sprintf
这样的内容来格式化字符串。
另一个不再在这里工作的人使用(非工作)循环,我认为使用库代码而不是实际修复循环会更好,因为无论如何我可能需要做类似的事情。
答案 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中你只需输入显示字符(无论是帮助代码,还是文本,或其他)。您不需要使用特殊功能来向页面显示文本。