为什么Coldfusion在list函数中去掉零
我在Coldfusion 10中遇到了一个奇怪的行为-我有一个名为为什么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”,而不是单
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将字符串中的每个字符视为分隔符。默认值为逗号。