Coldfusion中的Java方法给出了双重正确答案

Coldfusion中的Java方法给出了双重正确答案,java,coldfusion,lucee,Java,Coldfusion,Lucee,嗯,我部分回答了这个问题。我认为逗号是列表中的分隔符,我们被视为字符串的一部分。所以问题变成了——有没有更好的方法来设置Java列表 代码如下: <cfset objString = CreateObject( "java", "java.lang.String" ).Init( JavaCast( "string", "s,s,s,n,n,n" ) ) /> <cfset objString = objStri

嗯,我部分回答了这个问题。我认为逗号是列表中的分隔符,我们被视为字符串的一部分。所以问题变成了——有没有更好的方法来设置Java列表

代码如下:

<cfset objString = CreateObject(
"java",
"java.lang.String"
).Init(
    JavaCast(
        "string",
        "s,s,s,n,n,n"
        )
    )
/>

<cfset objString = objString.lastIndexOf('n') />

<cfoutput>
#objString#
</cfoutput>

#对象字符串#
答案应该是5,但我得到10。使用此方法和IndexOf()方法时,其他答案也会加倍。有人能告诉我如何解决这个问题(除了我的答案除以2)和/或发生了什么


lastIndexOf()方法在通用ColdFusion中工作,没有任何Java代码。但我正在尝试将该代码转换为Lucee,它不识别lastIndexOf()方法。上面的代码在Lucee中的工作方式与Coldfusion中的工作方式完全相同,即它给了我两倍的正确答案。

由于列表已作为字符串传递,因此,由于逗号(,)也被计数,因此您将得到两倍的结果

类有一个接受字符数组的构造函数,即,您可以尝试以下方法:

<!--- Comma delimited list --->
<cfset local.myList = "s,s,s,n,n,n">

<!--- Convert list to array --->
<cfset local.myCharArray = listToArray(local.myList, ",")>

<!--- Create String object using String(char[] value) contructor --->
<cfset local.objString = createObject(
                            "java",
                            "java.lang.String"
                         ).init( 
                              javaCast( "char[]", local.myCharArray )
                           )>

<!--- Get last index --->
<cfset local.lastIndex = local.objString.lastIndexOf('n') />

<!--- Output: 5 --->
<cfoutput>#local.lastIndex#</cfoutput>

以下是。

您实际上想做什么?我实际上正试图做示例所示的事情:查找列表中最后一个字母出现的位置。这是一个更复杂的程序的一部分。我不知道为什么会得到这个结果,但你可以反转字符串,然后使用listFind查找位置,然后从listLen中减去它以获得位置。只是为了澄清,CF中确实没有特殊的“list”类型。它只是一个普通的旧字符串。java方法
String.lastIndexOf()
只需查看一堆字符并搜索您指定的字符。它对分隔符一无所知。所以10是这里的正确答案。如果需要将单个字符视为离散元素,则必须坚持使用CF的“list”函数或使用某种数组对象(即java所称的数组对象)。只需使用字符串,将其反转,然后使用listFind。这两种方法都可以很好地工作,并准确地提供我需要的信息。@BettyMock很高兴它能帮上忙。:)
<!--- Comma delimited list --->
<cfset local.myList = "s,s,s,no,not,no">

<!--- Convert list to array --->
<cfset local.myCharArray = listToArray(local.myList, ",")>

<!--- Create ArrayList Object --->
<cfset local.objArrayList = createObject(
                                "java",
                                "java.util.ArrayList"
                            ).init( 
                                javaCast( "int", arrayLen(local.myCharArray) ) )>

<!--- Add item(s) --->
<cfset local.objArrayList.addAll(local.myCharArray)>

<!--- Get last index --->
<cfset local.lastIndex = local.objArrayList.lastIndexOf("no") />

<cfoutput>#local.lastIndex#</cfoutput>