2011-02-16 59 views
3

我有以下代碼ColdFusion的字符串::分裂()問題

<cffunction name="getObjTag" returnType="string" output="false"> 
    <cfargument name="obj" Type="string" required="true"> 
    <cfargument name="tagname" Type="string" required="true"> 
    <cfreturn obj.split("<" & tagname.toUpperCase() & ">")[2]> 
</cffunction> 

這將導致以下錯誤

Invalid CFML construct found on line 96 at column 63. 

ColdFusion was looking at the following text: 

[ 

The CFML compiler was processing: 

A cfreturn tag beginning on line 96, column 10. 
A cfreturn tag beginning on line 96, column 10. 

這是爲什麼?這發生在編譯,而不是運行。

回答

2

CF無法直接從函數調用中作爲數組訪問分割結果。你需要一箇中間變量。

<cfset var tmpArray = arrayNew(1)/> 
<cfset tmpArray = arguments.obj.split("<" & arguments.tagname.toUpperCase() & ">")/> 
<cfif arrayLen(tmpArray) gt 1> 
    <cfreturn tmpArray[2]/> 
<cfelse> 
    <cfreturn ""/> 
</cfif> 

您還需要觀察您的索引。儘管下面的java數組是0索引的,但使用coldfusion得到它會使其索引爲1.

+0

很好的答案,但也見我的。 CF9可以處理這個問題。 – 2011-02-17 14:21:56

3

CF 9增加了直接從函數調用中作爲數組訪問分割結果的功能。以下在9.0.1的本地安裝上按預期工作:

<cfset foo = "this is a string" /> 
<cfdump var="#foo.split(" ")[1]#" /> 

轉儲在此示例中顯示「this」。

+1

你可以發佈一個關於split()的文檔的鏈接。我很難找到任何東西。謝謝... – cfEngineers 2011-02-28 17:22:19