我想在 ColdFusion 中做一些类似于 C 或 Perl 中的 sprintf 的事情。我找到了这个 答案,这似乎是我正在寻找的。但是,我无法让它工作。
这是我正在尝试的:
<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。
非常感谢任何和所有帮助。