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

Java method in Coldfusion gives double the correct answer

嗯,我部分回答了问题。我认为逗号是列表中的分隔符,我们被视为字符串的一部分。所以问题就变成了——是否有更好的方法来设置 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 之外)and/or 发生了什么事?

lastIndexOf() 方法在通用 ColdFusion 中工作,无需任何 Java 代码。但我正在尝试将该代码转换为 Lucee,它无法识别 lastIndexOf() 方法。上面的代码在 Lucee 中的工作方式与在 Coldfusion 中的完全一样——也就是说,它给了我双倍的正确答案。

您得到的结果是原来的两倍,因为 comma(,) 也被计算在内,因为列表已作为字符串传递。

String class has a constructor that accepts a char array i.e., String(char[] value) 所以,你可以试试这个:

<!--- 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>

这里是 TryCF.

使用 ArrayList 处理 string 列表的另一种方法:

<!--- 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>

这里是 TryCF.