ColdFusion如何将特定格式字符串拆分为独立变量?
ColdFusion 拆分带前缀的下划线分隔字符串方法
针对你接收的格式如A:12345678_B:5482945_C:20220911_D:20230402_E:3.94的字符串,以下是几种简便的拆分实现方式:
方法一:动态创建独立变量
通过拆分列表+循环+动态变量赋值一步到位:
<cfset inputStr = "A:12345678_B:5482945_C:20220911_D:20230402_E:3.94"> <!--- 按下划线拆分所有项 ---> <cfset itemArray = ListSplit(inputStr, "_")> <!--- 遍历每项,拆分键名与值并创建变量 ---> <cfloop index="item" array="#itemArray#"> <!--- 只拆分前一个冒号,避免值中含冒号导致错误 ---> <cfset keyValuePair = ListSplit(item, ":", 2)> <!--- 动态生成对应变量 ---> <cfset SetVariable(keyValuePair[1], keyValuePair[2])> </cfloop> <!--- 验证输出 ---> <cfoutput> A: #A#<br> B: #B#<br> C: #C#<br> D: #D#<br> E: #E#<br> </cfoutput>
方法二:先转结构体再按需提取
如果需要保留原始结构或者后续有批量操作需求,先转成结构体更灵活:
<cfset inputStr = "A:12345678_B:5482945_C:20220911_D:20230402_E:3.94"> <cfset dataStruct = {}> <cfloop index="item" array="#ListSplit(inputStr, "_")#"> <cfset keyValuePair = ListSplit(item, ":", 2)> <cfset dataStruct[keyValuePair[1]] = keyValuePair[2]> </cfloop> <!--- 提取为独立变量 ---> <cfset A = dataStruct.A> <cfset B = dataStruct.B> <cfset C = dataStruct.C> <cfset D = dataStruct.D> <cfset E = dataStruct.E> <!--- ColdFusion 2021+ 支持解构赋值,更简洁 ---> <cfset {A, B, C, D, E} = dataStruct>
扩展:类型转换处理
如果需要将部分值转换为对应类型(比如日期、数值),可以在循环中添加判断:
<cfloop index="item" array="#ListSplit(inputStr, "_")#"> <cfset keyValuePair = ListSplit(item, ":", 2)> <cfswitch expression="#keyValuePair[1]#"> <cfcase value="C,D"> <!--- 把日期字符串转成日期对象 ---> <cfset dateVal = CreateDate(Left(keyValuePair[2],4), Mid(keyValuePair[2],5,2), Right(keyValuePair[2],2))> <cfset SetVariable(keyValuePair[1], dateVal)> <cfbreak> </cfcase> <cfcase value="E"> <!--- 把字符串转成数值 ---> <cfset SetVariable(keyValuePair[1], Val(keyValuePair[2]))> <cfbreak> </cfcase> <cfdefaultcase> <cfset SetVariable(keyValuePair[1], keyValuePair[2])> </cfdefaultcase> </cfswitch> </cfloop>
内容的提问来源于stack exchange,提问作者Martin B
相关产品推荐
相关产品推荐

