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

时间:2016-08-26 02:18:43

标签: java coldfusion lucee

好吧,我部分回答了这个问题。我认为逗号是列表中的分隔符,我们将其视为字符串的一部分。所以问题就变成了 - 有没有更好的方法来设置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一样 - 也就是说它给了我正确答案的两倍。

1 个答案:

答案 0 :(得分:3)

由于comma(,)也被计算在内,因此结果加倍,因为列表已作为字符串传递。

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