为什么Coldfusion在list函数中去掉零

为什么Coldfusion在list函数中去掉零,coldfusion,delimiter,coldfusion-10,Coldfusion,Delimiter,Coldfusion 10,我在Coldfusion 10中遇到了一个奇怪的行为-我有一个名为myString,“12600A07xxx”的变量 我想要“A07”前后的子字符串,所以我使用“A07”作为列表分隔符,并键入listFirst(myString,“A07”)和listLast(myString,“A07”) 首先,它去掉了零,并在应该返回“12600”时返回“126”。它对ListGetAt()也有同样的作用。为什么会发生这种情况?我明白了-CF将“A07”视为三个不同的分隔符,“A”、“0”和“7”,而不是单

我在Coldfusion 10中遇到了一个奇怪的行为-我有一个名为
myString
,“12600A07xxx”的变量

我想要“A07”前后的子字符串,所以我使用“A07”作为列表分隔符,并键入
listFirst(myString,“A07”)
listLast(myString,“A07”)


首先,它去掉了零,并在应该返回“12600”时返回“126”。它对
ListGetAt()
也有同样的作用。为什么会发生这种情况?

我明白了-CF将“A07”视为三个不同的分隔符,“A”、“0”和“7”,而不是单个分隔符“A07”。有两种方法可以解决这个问题,最简单的方法是用单个字符(如管道)临时替换“A07”,并将其用作临时分隔符。

正如您已经注意到的,ColdFusion有许多带有单个字符分隔符的函数。但是,也有支持多字符分隔符的函数,例如
listToArray(列表[,分隔符[,includeEmptyFields[,多字符分隔符]])

例如:

parts = listToArray("12600A07xxx", "A07", false, true);
writeOutput( parts[1] ); // >> 12600
writeOutput( parts[2] ); // >> xxx

旁注:是否确实要使用特定分隔符拆分输入?对于此类数据,最好使用正则表达式模式。不过只是一个猜测。

另一种方法可能是使用
reReplaceNoCase()
。像这样:

theString = "12600A07xxx";
prefix  =  reReplaceNoCase(theString , "A07.*", "");
suffix  =  reReplaceNoCase(theString , ".*A07", "");

根据文档
一个字符串或包含一个字符串的变量。ColdFusion将字符串中的每个字符视为分隔符。默认值为逗号。