获得;找不到格式方法";尝试使用ColdFusion中的java.lang.string格式方法时

获得;找不到格式方法";尝试使用ColdFusion中的java.lang.string格式方法时,coldfusion,coldfusion-9,Coldfusion,Coldfusion 9,我想在ColdFusion中做一些类似于C或Perl中的sprintf的事情。我找到了这个 ,这似乎就是我要找的。然而,我不能让它工作 以下是我正在尝试的: <cftry> <cfset firstName="John"> <cfset output=createObject("java","java.lang.String").format("Hello, %s!", firstName)> <cfcatch type="any

我想在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:没有使用指定方法的方法 名称和参数类型或format方法重载 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、Windows7、Java1.6.0\u22

非常感谢您的帮助。

根据我的上述评论回答:

它可能与您正在寻找的format方法不匹配,因为它的签名是format(String,Object[]),并且您的第二个String参数无法自动转换为对象数组

您可以将参数更改为将名称封装在数组中,如下所示:
格式(“Hello,%s!”,[firstName])


多亏了李的礼貌,我对你的评论投了赞成票:)

我闻到了XY的问题。为什么你不能简单地说:#firstname#?仅供参考:它可能无法匹配你正在寻找的
格式
方法,因为它的签名是
格式(String,Object[])
并且你的第二个
字符串
参数不能自动转换为
对象
数组。链接的示例是错误的。第二个参数应该是一个数组
output=javacast(“string”,”).format(“Hello%s”,[“John”])
。(编辑)但是你能详细说明你的最终目标吗?因为这看起来太复杂了…谢谢托里斯和利!这就解决了。我对这里的提问是全新的,在评论中回答这个问题时,有没有关于如何标记答案的建议?通常我的座右铭是,只有在CF中无法轻松完成某些事情时才使用java。我知道
格式
很吸引人,因为它是一个单一的函数,并且具有更大的模式灵活性IIRC。但是,由于它是直接java访问,因此对输入要求更严格。更不用说你失去了一些由CF功能提供的自动铸造。因此,您可能需要运行一些测试,以确保它在所有预期条件下都能正常工作。至于回答,@Torious应该把他的“评论”提升为“回答”。然后您可以选择它(欢迎来到stackoverflow顺便说一句:)