我想将11位数的字符串转换为数组。在ColdFusion 9中有更优雅的方法吗?
local.string = [];
for (local.i = 1; local.i <= len(arguments.string); local.i++)
{
local.string[ local.i ] = mid(arguments.string, local.i, 1);
}
如果我的字符串是12345
,那么数组看起来像string[1] = 1; string[2] = 2
等......
答案 0 :(得分:7)
我认为有一种优雅的方式适用于任何版本的ColdFusion。
诀窍是使用CF的列表操作函数 - 如果指定“”的分隔符(即什么都没有),它会将字符串的每个字符看作列表项。
所以你想要的是:
local.string = listToArray(arguments.string, "");
这将为您提供一系列人物......
答案 1 :(得分:6)
这适用于CF8,不依赖于CF9中的“bug”:
stringAsList = REReplace( string,"(.)","\1,","ALL" );
array = ListToArray( stringAsList );
答案 2 :(得分:0)
如果你真的想使用java方法String.split(),它会返回一个String [],所以你必须将它的值复制到一个新的数组中,例如。 myArray = arrayNew(1)
+ myArray.addAll( myStringArr )
。
答案 3 :(得分:-2)
有趣的是,似乎你可以使用.split()java方法做类似的事情,并得到类似的结果。
一些背景知识:因为CF是基于Java构建的,所以它可以利用许多底层的java方法和类。根据Adobe的Rupesh Kuman(http://coldfused.blogspot.com/2007/01/extend-cf-native-objects-harnessing.html),CF数组是java.util.List的一个实现,所以所有的列表方法也可用于CF阵列。其中一个更有用的是.split()方法。这需要一个字符串,并根据0或更多字符的任意分隔符将其转换为数组。
这就是我所做的:将列表设置为11位数字,使用split方法创建数组,然后显示结果。
<cfset testList = "12345678901" />
<cfset testArray = testList.split("") />
<cfset request.cfdumpinited = false />
<cfdump label="testArray" expand="true" var="#testArray#"/>
<cfabort />
如果你运行它,你会看到最终得到一个12项数组,第一个索引项为空。只需使用ArrayDelete()或ArrayDeleteAt()删除那个,你应该好好去。从CFMX 6开始,这应该适用于所有版本的ColdFusion。