我想在ColdFusion中做一些类似于C或Perl中的sprintf的东西。我找到了这个 answer,这似乎是我正在寻找的。但是,我无法让它发挥作用。
以下是我正在尝试的内容:
<cftry>
<cfset firstName="John">
<cfset output=createObject("java","java.lang.String").format("Hello, %s!", firstName)>
<cfcatch type="any">
<cfdump var="#cfcatch#" expand="false">
</cfcatch>
<cftry>
这就是我得到的:
cfcatch.Message:找不到格式化方法。
cfcatch.Detail:没有指定方法的方法 名称和参数类型或格式方法重载 ColdFusion无法可靠解密的参数类型。 ColdFusion的 找到0个与提供的参数匹配的方法。如果这是一个Java 对象和您验证该方法存在,使用javacast 减少歧义的功能。
这是一个重载方法,所以我按照建议做了,并在参数上使用了JavaCast:
<cfset output=createObject("java","java.lang.String").format(JavaCast('string', "Hello, %s!"), firstName)>
<cfset output=createObject("java","java.lang.String").format("Hello, %s!", JavaCast('string', firstName))>
<cfset output=createObject("java","java.lang.String").format(JavaCast('string', "Hello, %s!"), JavaCast('string', firstName))>
每次都出现同样的错误。
我在String类上尝试了另一个静态方法valueOf,它运行正常。
修改 我已经看过评论了,我不知道如何回应这些,但也许我应该在这里解释一下。我上面展示的是一个极其简化的例子,说明了我要做的事情。目标是使用格式字符串在一个地方提供大量格式,然后简单地传入一个变量列表,而不是格式化一堆变量并输出它们,或者在我输出它们时格式化它们。使用format方法,我计划构建一组与我需要的输出相匹配的格式字符串,然后我将对查询进行cfloop或cfoutput,在里面运行这个方法,并获得我想要的输出。没有DateFormat,NumberFormat,Left,Right等。如果我不能让这个工作,那就是B计划。
我正在运行ColdFusion 9.01,Windows 7,Java 1.6.0_22。
非常感谢任何和所有帮助。
答案 0 :(得分:1)
根据我上面的评论回答:
它可能无法匹配您正在寻找的格式方法,因为它的签名是格式(String,Object []),而您的第二个String参数不能自动转换为Object数组。
您可以更改参数以将名称封装在数组中,如下所示:format("Hello, %s!", [firstName])
。
感谢Leigh非常有礼貌,我赞成你的意见:)