Coldfusion中的Java方法给出了双重正确答案
嗯,我部分回答了这个问题。我认为逗号是列表中的分隔符,我们被视为字符串的一部分。所以问题变成了——有没有更好的方法来设置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
<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>