-1

好吧,我部分回答了这个问题。我认为逗号是列表中的分隔符,我们被视为字符串的一部分。那么问题就变成了——有没有更好的方法来建立一个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() 方法在没有任何 Java 代码的通用 ColdFusion 中工作。但我正在尝试将该代码转换为 Lucee,它无法识别 lastIndexOf() 方法。上面的代码在 Lucee 中的工作方式与在 Coldfusion 中完全一样——也就是说,它给了我两倍的正确答案。

4

1 回答 1

3

comma(,)由于列表已作为字符串传递,因此您也将获得双倍的结果。

String类有一个接受char arrayie 的构造函数,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.

于 2016-08-26T06:41:45.723 回答