您的位置:首页 > 产品设计 > UI/UE

(原创)类似于.Net里的StringBuilder的类

2004-08-19 10:03 253 查看
写过ASP.Net 程序的都知道ASP.Net提供有一个StringBuilder类,此类有点类似于JAVA的String流,就是同ASP中的字符串变量差不多的了.但如果对于数据多的话则此类的字符串处理比动态字符串变量的性能要好得多!具体原因可以看此文[改进 ASP 应用程序中的字符串处理性能].并且我写的"模版类"也会有时对大量的数据进行连接使用.所以就写了这个类似StringBuilder的类.但我测试了一下使用该类和不使用该类的运行时间.发现好像没有什么区别(可能我测试时的数据量还不多,感觉不出来罢了).各位有兴趣的也可以使用一下或者修改改进一下此类.如果你修改改进此类后麻烦你提供一份程序给我.谢谢:)

<%
'/*====================================
'/*作者:死在水中的鱼
'/*日期:2004年7月11日
'/*Blog:http://blog.lznews.cn/blog.asp?name=哇哇鱼
'/*版本:1.0
'/*类的使用方法:
'/* Dim objString
'/* Set objString=New StringBuilder
'/* objString.InitiSize=1024
'/* objString.IncreaseSize=100
'/* objString.Append "增加字符串"
'/* objString.Insert "插入字符串",20
'/* Response.Write objString.ToString
'/* objString.Clear
'/* objString.Append "第二次增加字符串"
'/* Response.Write objString.ToString
'/* Set objString=nothing
'/* 转载时或修改时,请尊重作者的知识产权,保留此说明!
'/*======================================
Class StringBuilder
Public InitiSize '被始化的大小空间
Public IncreaseSize '每次增加的大小空间
Private S_SpaceString '自身类使用的缓存变量
Private S_Position '用来标记当前添加字符串的位置
Private S_MaxSize '用来标记当前的缓存变量的大小

Private Sub Class_Initialize
InitiSize=5120 '默认的大小空间是5K的大小
IncreaseSize=512 '默认的每次增加的大小空间是0.5K
S_SpaceString=""
End Sub

'/*====================================
'/*函数名:InitializeSpace()
'/*函数作用:被始化S_SpaceString的大小空间
'/*入口参数:
'/*返回值:
'/*====================================
Private Sub InitializeSpace()
'少于100Byte的话按默认值
If InitiSize<100 then
InitiSize=5120
End if
'增加量少于10Byte的话按默认值
If IncreaseSize<10 Then
IncreaseSize=512
End If
If S_SpaceString="" Then
S_SpaceString=Space(InitiSize)
S_Position=0
S_MaxSize=InitiSize
End If
End Sub

'/*====================================
'/*函数名:InCreaseSpace(iSize)
'/*函数作用:增加字符串类的缓存空间
'/*入口参数:iSize=要添加的字符串大小
'/*返回值:
'/*说明:iSize此处按ByRef是按地址传入,所以不会再另外增加新的字符串
'/*====================================
Private Sub InCreaseSpace(ByRef iSize)
If iSize<1 Then Exit Sub
S_SpaceString=S_SpaceString&Space(iSize)
S_MaxSize=S_MaxSize+iSize
End Sub

'/*====================================
'/*函数名:Append(sString)
'/*函数作用:添加字符串在类的缓存空间
'/*入口参数:sString=要添加的字符串
'/*返回值:
'/*说明:sString此处按ByRef是按地址传入,所以不会再另外增加新的字符串
'/*====================================
Public Sub Append(ByRef sString)
Dim iLen,pSize
Call InitializeSpace '如果缓存变量为空则被始化空间大小
iLen=Len(sString)
pSize=iLen+S_Position
If pSize>S_MaxSize Then
'如果要添加的字符串比当前缓存变量的空间大的话,增加空间
If (pSize-S_MaxSize)<IncreaseSize Then
'要增加的空间小于每次增加的大小值时增加空间,否则的话不用增加,但要修改S_MaxSize的值
Call InCreaseSpace(IncreaseSize)
Else
S_MaxSize=pSize
End If
End If
S_SpaceString=Left(S_SpaceString,S_Position)&sString&Mid(S_SpaceString,pSize+1)
S_Position=pSize
End Sub

'/*====================================
'/*函数名:Insert(sString,iPos)
'/*函数作用:插入字符串在类的缓存空间
'/*入口参数:sString=要插入的字符串 iPos=要插入的位置
'/*返回值:
'/*说明:sString此处按ByRef是按地址传入,所以不会再另外增加新的字符串
'/*====================================
Public Sub Insert(ByRef sString,ByVal iPos)
Dim iLen
If iPos>S_MaxSize then
iPos=S_MaxSize
End if
iLen=Len(sString)
S_SpaceString=Left(S_SpaceString,iPos)&sString&Mid(S_SpaceString,iPos+1)
S_MaxSize=S_MaxSize+iLen
iPos=iPos+iLen
If iPos>S_Position then
'如果插入后的字符串的位置大于类的缓存"指针"位置则移动"指针"
S_Position=iPos
End If
End Sub

'/*====================================
'/*函数名:ToString()
'/*函数作用:返回字符串
'/*入口参数:
'/*返回值:经过处理后的sString值
'/*说明:
'/*====================================
Public Function ToString()
ToString=Left(S_SpaceString,S_Position)
End Function

'/*====================================
'/*函数名:Clear()
'/*函数作用:清空以前的数据,重新被始化
'/*入口参数:
'/*返回值:
'/*说明:
'/*====================================
Public Sub Clear()
S_SpaceString=Space(InitiSize)
S_Position=0
S_MaxSize=InitiSize
End Sub

Private Sub Class_Terminate
S_SpaceString=""
End Sub
End Class
%>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: