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