asp字符串转数组
作者:焦点 来源:百科 浏览: 【大 中 小】 发布时间:2026-10-17 06:09:43 评论数:
用ASP处理表单提交时,字转数组经常遇到一个字段传过来是符串逗号分隔的字符串,比如用户选了多个兴趣爱好:"篮球,字转数组足球,羽毛球"。你拿到这个字符串,符串下一步多半是字转数组要拆开逐个处理。ASP里干这事就一个函数:Split。符串
直接上代码:
Dim str,字转数组 arr str = "篮球,足球,羽毛球" arr = Split(str, ",") Response.Write(arr(0)) ' 输出:篮球 Response.Write(arr(1)) ' 输出:足球 Response.Write(arr(2)) ' 输出:羽毛球 Split返回的是一个从0开始的数组,arr(0)是符串第一个元素。这个用法简单到没什么好解释的字转数组,但实际写代码的符串时候,坑往往出在别的字转数组地方。
比如空格。符串用户填的字转数组是"篮球, 足球, 羽毛球",逗号后面带了个空格。符串Split按逗号拆完,字转数组第二个元素变成" 足球",前面多了个空格。如果你拿这个值去数据库查,查不到。解决办法是用Trim逐个清一下:
Dim i For i = 0 To UBound(arr) arr(i) = Trim(arr(i)) Next UBound拿的是数组最大下标。这里有个细节,UBound(arr)返回2,因为数组有3个元素。循环条件写0 To UBound(arr),刚好遍历全部。
还有一种情况更隐蔽——字符串里连续两个逗号,或者开头结尾就有逗号。比如",篮球,,足球,"。Split拆出来是:空字符串、"篮球"、空字符串、"足球"、空字符串。五个元素,其中三个是空的。你要是不管,后面循环处理时可能报错或者写入脏数据。得加个判断:
For i = 0 To UBound(arr) If Trim(arr(i)) <> "" Then ' 处理有效值 End If Next Split还有第三个参数,控制拆分次数。默认是-1,表示能拆多少拆多少。如果你设成2,那它只拆一次,剩下的原样保留在第二个元素里。举个例子:
arr = Split("张三:20:北京", ":", 2) ' arr(0) = "张三" ' arr(1) = "20:北京" 这个用法在处理类似"键:值"格式的字符串时挺方便,只关心第一个冒号前面的内容,后面不管有多少冒号都不影响。
数组拿到之后,除了For循环,还可以用Join再拼回去。Join和Split正好反过来:
Dim newStr newStr = Join(arr, "|") ' 结果:"篮球|足球|羽毛球" 有时候需要对数组去重。ASP没有内置去重函数,得自己写。思路也简单,拿一个Dictionary对象来存,因为Dictionary的Key天然不重复:
Dim dict, item Set dict = Server.CreateObject("Scripting.Dictionary") For Each item In arr If Trim(item) <> "" Then dict(Trim(item)) = "" End If Next ' dict.Keys 就是去重后的结果 Dictionary在ASP里是个好东西,去重、计数、查找都能用。比嵌套循环效率高得多。不过记得用完释放:Set dict = Nothing。
我见过有人用Replace把逗号换成换行符再处理,绕了一大圈。Split本身就是干这个的,没必要。还有人把字符串转成数组后,用数组再拼回字符串,再拆一次——这种代码读起来头疼。一次Split拆到位,后面在该数组上操作就行。
另外注意一点,Split的返回值永远是字符串数组,不会自动转成数字。如果拆出来的是"1,2,3",arr(0)是字符串"1",不是数字1。做数值比较时记得用CInt或CLng转一下,不然"10"和"9"按字符串比较,"10"反而小于"9"。
实际项目里,我一般会封装一个小函数,把Split、Trim、去空这三步合在一起:
Function SplitClean(str, delimiter) Dim tmp, result, i, n tmp = Split(str, delimiter) n = 0 ReDim result(UBound(tmp)) For i = 0 To UBound(tmp) If Trim(tmp(i)) <> "" Then result(n) = Trim(tmp(i)) n = n + 1 End If Next ReDim Preserve result(n - 1) SplitClean = result End Function ReDim Preserve会重新调整数组大小并保留已有数据,但频繁调用影响性能。数据量不大时无所谓,几千条以内感觉不到差别。数据量大就改用Dictionary或ArrayList。
说到底,Split就一个参数组合的事,但真正写起来,边界情况比核心逻辑多。字符串开头结尾有没有分隔符、中间有没有连续分隔符、元素带不带空格——这些才是决定代码稳不稳的地方。
