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
.
嗯,我部分回答了问题。我认为逗号是列表中的分隔符,我们被视为字符串的一部分。所以问题就变成了——是否有更好的方法来设置 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
.