有没有更优雅的方法将字符串转换为数组?

时间:2011-05-01 14:15:03

标签: arrays coldfusion coldfusion-9

我想将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等......

4 个答案:

答案 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。