-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 倍になります。誰かがこれを修正する方法を教えてもらえますか (私の答えを 2 で割る以外に)、および/または何が起こっているのでしょうか?

lastIndexOf() メソッドは、Java コードを使用せずに一般的な ColdFusion で動作しています。しかし、そのコードを Lucee に変換しようとしていますが、これは lastIndexOf() メソッドを認識しません。上記のコードは、Coldfusion の場合とまったく同じように Lucee で機能します。つまり、2 倍の正解が得られます。

4

1 に答える 1

3

comma(,)リストが文字列として渡されているため、同様にカウントされるため、2 倍の結果が得られます。

Stringchar arrayクラスにはieを受け入れるコンストラクターがある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 に答える