Tools - 字符串工具类
cToolsStr - 字符串处理工具
概述
提供丰富的字符串处理功能,包括正则提取、行分割、编码检测、字符串切片、随机字符串生成等。
文本分割与合并
ParseNumbers
从字符串中提取数字(支持小数)。
vb
Function ParseNumbers(inputString As String, Optional DecimalPlaces As Long = -1, Optional Count As Long) As Collection参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
inputString | String | 输入字符串 |
DecimalPlaces | Long | 小数位数,-1表示不处理 |
Count | Long | 提取个数限制,0表示不限制 |
示例:
vb
Dim Numbers As Collection
Set Numbers = VBMAN.ToolsStr.ParseNumbers("价格: 123.5元,数量: 10个")
Dim n As Variant
For Each n In Numbers
Debug.Print n ' 输出: 123.5, 10
Next nSplitLinesToCollection
将文本按行分割为集合。
vb
Public Function SplitLinesToCollection(ByVal Text As String) As cCollection示例:
vb
Dim Lines As cCollection
Set Lines = VBMAN.ToolsStr.SplitLinesToCollection("Line1" & vbCrLf & "Line2")
Debug.Print Lines(1) ' 输出: Line1JoinLinesFromCollection
将行集合合并为字符串。
vb
Public Function JoinLinesFromCollection(Coll As cCollection) As String示例:
vb
Dim Lines As cCollection
Set Lines = New cCollection
Lines.Add "Line1"
Lines.Add "Line2"
Dim Text As String
Text = VBMAN.ToolsStr.JoinLinesFromCollection(Lines)
Debug.Print Text ' 输出: Line1\r\nLine2SplitLines
将文本按行分割为数组。
vb
Public Function SplitLines(ByVal Text As String) As String()示例:
vb
Dim Lines() As String
Lines = VBMAN.ToolsStr.SplitLines("Line1" & vbCrLf & "Line2")
Debug.Print Lines(0) ' 输出: Line1字符串查询与判断
HasStr
检查字符串是否包含子串(返回位置,0表示不存在)。
vb
Public Function HasStr(ByVal FindStr As String, FullStr As String, Optional StartPos As Long = 1, Optional CompType As VbCompareMethod = vbTextCompare) As Long示例:
vb
If VBMAN.ToolsStr.HasStr("test", "this is a test") > 0 Then
Debug.Print "包含 test"
End If
' 指定起始位置
Dim Pos As Long
Pos = VBMAN.ToolsStr.HasStr("a", "banana", 2)
Debug.Print Pos ' 输出: 4HasStrFromRight
从右侧开始检查字符串是否包含子串。
vb
Public Function HasStrFromRight(ByVal FindStr As String, FullStr As String, Optional StartPos As Long = -1, Optional CompType As VbCompareMethod = vbTextCompare) As Long示例:
vb
Dim Pos As Long
Pos = VBMAN.ToolsStr.HasStrFromRight("a", "banana")
Debug.Print Pos ' 输出: 6(最后一个a的位置)IsEmptyEx
检查字符串是否为空(去除空白字符后)。
vb
Public Function IsEmptyEx(Text As String) As Boolean示例:
vb
Debug.Print VBMAN.ToolsStr.IsEmptyEx(" ") ' 输出: True
Debug.Print VBMAN.ToolsStr.IsEmptyEx("hello") ' 输出: FalseIsString
检查变量是否为字符串类型。
vb
Public Function IsString(var As Variant) As Boolean示例:
vb
Debug.Print VBMAN.ToolsStr.IsString("hello") ' 输出: True
Debug.Print VBMAN.ToolsStr.IsString(123) ' 输出: False字符串切片与截取
SliceString
处理 String 类型的切片。
vb
Public Function SliceString(ByVal Arr As String, ByVal StartPos As Long, Optional ByVal EndPos As Long = -1) As String参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
Arr | String | 源字符串 |
StartPos | Long | 起始位置(0-based) |
EndPos | Long | 结束位置(0-based),-1表示到末尾 |
示例:
vb
Dim str As String
Dim sliced As String
str = "Hello World"
sliced = VBMAN.ToolsStr.SliceString(str, 0, 4)
Debug.Print sliced ' 输出: Hello
' 从位置6到末尾
sliced = VBMAN.ToolsStr.SliceString(str, 6)
Debug.Print sliced ' 输出: WorldSubStr
截取任意位置字符串(根据起始和结束标记)。
vb
Public Function SubStr(ByVal Txt As String, ByVal txtFirst As String, Optional ByVal txtEnd As String, Optional RetInt As Boolean, Optional Method As VbCompareMethod = vbBinaryCompare, Optional FindFromEnd As Boolean) As String参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
Txt | String | 源字符串 |
txtFirst | String | 起始标记 |
txtEnd | String | 结束标记,为空则取到末尾 |
RetInt | Boolean | 未找到时返回"0"而不是空字符串 |
Method | VbCompareMethod | 比较方式 |
FindFromEnd | Boolean | 从末尾开始查找结束标记 |
示例:
vb
Dim Text As String
Dim Result As String
Text = "<div>Hello World</div>"
' 提取div标签内的内容
Result = VBMAN.ToolsStr.SubStr(Text, "<div>", "</div>")
Debug.Print Result ' 输出: Hello World
' 从末尾查找
Result = VBMAN.ToolsStr.SubStr(Text, "<", ">", False, vbBinaryCompare, True)
Debug.Print Result ' 输出: /divMidEx
截取任意位置字符串(支持起始位置)。
vb
Public Function MidEx(FullStr As String, Lstr As String, Rstr As String, Optional starindex As Long) As String示例:
vb
Dim Text As String
Text = "name[张三]age[25]city[北京]"
Dim Result As String
Dim StartPos As Long
Result = VBMAN.ToolsStr.MidEx(Text, "[", "]", StartPos)
Debug.Print Result ' 输出: 张三
Debug.Print StartPos ' 输出: 下一个查找的起始位置ToArray
将字符串转换为字符数组。
vb
Public Function ToArray(Text As String) As String()示例:
vb
Dim CharArray() As String
CharArray = VBMAN.ToolsStr.ToArray("Hello")
Dim i As Long
For i = LBound(CharArray) To UBound(CharArray)
Debug.Print CharArray(i) ' 输出: H e l l o
Next i字符串修剪与处理
TrimEx
去除字符串前后的空白字符(包括不可见字符)。
vb
Public Function TrimEx(ByRef Text As String, Optional IsLeft As Boolean = True, Optional IsRight As Boolean = True) As String参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
Text | String | 源字符串 |
IsLeft | Boolean | 是否去除左侧空白 |
IsRight | Boolean | 是否去除右侧空白 |
示例:
vb
Dim Text As String
Text = vbCrLf & " Hello World " & vbTab
Debug.Print VBMAN.ToolsStr.TrimEx(Text) ' 输出: Hello World
Debug.Print VBMAN.ToolsStr.TrimEx(Text, True, False) ' 输出: Hello World \t
Debug.Print VBMAN.ToolsStr.TrimEx(Text, False, True) ' 输出: \r\n Hello WorldRightEx / LeftEx
获取字符串右侧/左侧指定长度的字符。
vb
Public Function RightEx(Text As Variant, Length As Long) As String
Public Function LeftEx(Text As Variant, Length As Long) As String示例:
vb
Dim Text As String
Text = " Hello World "
Debug.Print VBMAN.ToolsStr.RightEx(Text, 5) ' 输出: World
Debug.Print VBMAN.ToolsStr.LeftEx(Text, 5) ' 输出: HelloInsertSpan
每隔指定字符数插入分隔符。
vb
Public Function InsertSpan(ByRef inputStr As String, ByVal Span As String, ByVal SetpNum As Long, Optional HeadFoot As Boolean) As String参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
inputStr | String | 源字符串 |
Span | String | 分隔符 |
SetpNum | Long | 每隔多少字符插入 |
HeadFoot | Boolean | 是否在首尾也添加分隔符 |
示例:
vb
Dim Text As String
Text = "1234567890123456"
' 每4位插入一个空格
Debug.Print VBMAN.ToolsStr.InsertSpan(Text, " ", 4) ' 输出: 1234 5678 9012 3456
Debug.Print VBMAN.ToolsStr.InsertSpan(Text, "-", 4, True) ' 输出: -1234-5678-9012-3456-字符串编码转换
PercentEncode / PercentDecode
百分号编码/解码(将数字转换为%格式)。
vb
Public Function PercentEncode(inputStr As String) As String
Function PercentDecode(encodedStr As String) As String示例:
vb
Dim Text As String
Text = "43068119891129321X"
Dim Encoded As String
Encoded = VBMAN.ToolsStr.PercentEncode(Text)
Debug.Print Encoded ' 输出: %34%33%30%36%38%31%31%39%38%39%31%31%32%39%33%32%31X
Dim Decoded As String
Decoded = VBMAN.ToolsStr.PercentDecode(Encoded)
Debug.Print Decoded ' 输出: 43068119891129321XUnicodeEncode / UnicodeDecode
Unicode 编码/解码(\uXXXX格式)。
vb
Public Function UnicodeEncode(ByVal inputString As String, Optional PreFix As String = "\u") As String
Public Function UnicodeDecode(Text As String, Optional PreFix As String = "\u") As String示例:
vb
Dim Text As String
Text = "你好 World"
Dim Encoded As String
Encoded = VBMAN.ToolsStr.UnicodeEncode(Text)
Debug.Print Encoded ' 输出: \u4F60\u597D World
Dim Decoded As String
Decoded = VBMAN.ToolsStr.UnicodeDecode(Encoded)
Debug.Print Decoded ' 输出: 你好 World字节数组操作
ToBytes
将字符串转换为字节数组(Unicode)。
vb
Public Function ToBytes(inputString As String) As Byte()示例:
vb
Dim Bytes() As Byte
Bytes = VBMAN.ToolsStr.ToBytes("Hello")FromByteArray
将字节数组转换为字符串。
vb
Public Function FromByteArray(inputArray() As Byte, Optional CharSet As String = "UTF-8") As String示例:
vb
Dim Bytes() As Byte
Bytes = VBMAN.ToolsStr.ToBytes("Hello")
Dim Text As String
Text = VBMAN.ToolsStr.FromByteArray(Bytes)
Debug.Print Text ' 输出: HelloLenBytes
计算字节数组长度。
vb
Public Function LenBytes(inputArray() As Byte) As Long示例:
vb
Dim Bytes() As Byte
Bytes = VBMAN.ToolsStr.ToBytes("Hello")
Debug.Print VBMAN.ToolsStr.LenBytes(Bytes) ' 输出: 5ToHex / FromHex
字符串与十六进制转换。
vb
Public Function ToHex(InputData As Variant, Optional CharSet As String = "UTF-8") As String
Public Function FromHex(hexStr As String, Optional CharSet As String = "UTF-8") As String示例:
vb
Dim Text As String
Text = "Hello"
' 转为十六进制
Dim HexStr As String
HexStr = VBMAN.ToolsStr.ToHex(Text)
Debug.Print HexStr ' 输出: 48656C6C6F
' 从十六进制还原
Dim Original As String
Original = VBMAN.ToolsStr.FromHex(HexStr)
Debug.Print Original ' 输出: Hello随机字符串生成
GetRandStr
获取随机字符串。
vb
Public Function GetRandStr(Optional ByVal Lens As Long = 32, Optional Zuhe As String = "1aA") As String参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
Lens | Long | 字符串长度 |
Zuhe | String | 字符组合:1=数字, a=小写, A=大写, @=特殊字符 |
示例:
vb
' 纯数字,8位
Debug.Print VBMAN.ToolsStr.GetRandStr(8, "1")
' 数字+小写字母,16位
Debug.Print VBMAN.ToolsStr.GetRandStr(16, "1a")
' 数字+大小写字母,32位
Debug.Print VBMAN.ToolsStr.GetRandStr(32, "1aA")
' 包含特殊字符
Debug.Print VBMAN.ToolsStr.GetRandStr(16, "1aA@")GetRandByte / GetRandByteToHex
获取随机字节数组。
vb
Public Function GetRandByte(Optional ByteSize As Long = 32) As Byte()
Public Function GetRandByteToHex(Optional ByteSize As Long = 32, Optional Span As String = "") As String示例:
vb
' 获取32字节随机数组
Dim Bytes() As Byte
Bytes = VBMAN.ToolsStr.GetRandByte(32)
' 获取16字节随机字符串(十六进制)
Dim HexStr As String
HexStr = VBMAN.ToolsStr.GetRandByteToHex(16)
Debug.Print HexStr ' 输出: a3f7b2c8d1e5...
' 带分隔符
HexStr = VBMAN.ToolsStr.GetRandByteToHex(16, "-")
Debug.Print HexStr ' 输出: a3-f7-b2-c8-...GUID 生成
GetGUID
生成 GUID 字符串。
vb
Public Function GetGUID(Optional isFull As Boolean) As String参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
isFull | Boolean | 是否返回完整格式(包含括号) |
示例:
vb
' 标准GUID格式
Debug.Print VBMAN.ToolsStr.GetGUID() ' 输出: 550e8400-e29b-41d4-a716-446655440000
' 完整格式(带括号)
Debug.Print VBMAN.ToolsStr.GetGUID(True) ' 输出: {550e8400-e29b-41d4-a716-446655440000}辅助函数
JoinStr
使用指定分隔符连接多个字符串。
vb
Public Function JoinStr(Span As String, ParamArray Strings() As Variant) As String示例:
vb
Dim Result As String
Result = VBMAN.ToolsStr.JoinStr("-", "2024", "05", "17")
Debug.Print Result ' 输出: 2024-05-17UniVbCrLf
统一换行符为 vbCrLf。
vb
Public Function UniVbCrLf(Text As String) As String示例:
vb
Dim Text As String
Text = "Line1" & vbLf & "Line2" & vbCr & "Line3"
Dim Result As String
Result = VBMAN.ToolsStr.UniVbCrLf(Text)
' 结果: Line1\r\nLine2\r\nLine3GetFirstChar / GetLastChar
获取首/尾有效字符。
vb
Public Function GetFirstChar(Txt As String, Optional Length As Long = 1) As String
Public Function GetLastChar(Txt As String, Optional Length As Long = 1) As String示例:
vb
Dim Text As String
Text = " Hello World "
Debug.Print VBMAN.ToolsStr.GetFirstChar(Text) ' 输出: H
Debug.Print VBMAN.ToolsStr.GetLastChar(Text) ' 输出: d
Debug.Print VBMAN.ToolsStr.GetFirstChar(Text, 5) ' 输出: HellocFormater - 通用格式化器
概述
支持链式调用的通用格式化类,可格式化文件大小、时间、数字等。
链式入口
Data
设置要格式化的数据源。
vb
Public Function Data(ByVal Source As Variant) As cFormater文件大小格式化
ReturnFileSize
格式化文件大小为易读格式(B/KB/MB/GB/TB)。
vb
Public Function ReturnFileSize(Optional ByVal DecimalPlaces As Long = 2, Optional ByVal ForceUnit As String = "") As String示例:
vb
' 自动选择单位
Debug.Print VBMAN.Formater.Data(1536).ReturnFileSize() ' 1.50 KB
Debug.Print VBMAN.Formater.Data(1572864).ReturnFileSize() ' 1.50 MB
' 强制单位
Debug.Print VBMAN.Formater.Data(1024).ReturnFileSize(2, "KB") ' 1.00 KB
Debug.Print VBMAN.Formater.Data(1024).ReturnFileSize(2, "B") ' 1024.00 B时间格式化
ReturnRelativeTime
返回相对时间描述(几秒前、几分钟前等)。
vb
Public Function ReturnRelativeTime() As String示例:
vb
Dim Ts As Currency
Ts = VBMAN.ToolsDateTime.GetUnixTimestamp() - 60000 ' 1分钟前
Debug.Print VBMAN.Formater.Data(Ts).ReturnRelativeTime() ' 1分钟前ReturnDuration
格式化持续时间。
vb
Public Function ReturnDuration(Optional ByVal Precision As String = "auto") As String示例:
vb
Debug.Print VBMAN.Formater.Data(65000).ReturnDuration() ' 1分5秒
Debug.Print VBMAN.Formater.Data(3661000).ReturnDuration() ' 1小时1分1秒数字格式化
ReturnNumber
格式化数字(千分位、小数位等)。
vb
Public Function ReturnNumber(Optional ByVal DecimalPlaces As Long = -1, Optional ByVal UseThousandSeparator As Boolean = True) As String示例:
vb
Debug.Print VBMAN.Formater.Data(1234567.89).ReturnNumber() ' 1,234,567.89
Debug.Print VBMAN.Formater.Data(1234567.89).ReturnNumber(0) ' 1,234,568完整示例
vb
Private Sub FormatterDemo()
' 文件大小
Dim FileSize As Currency
FileSize = FileLen("C:\\largefile.zip")
lblSize.Caption = VBMAN.Formater.Data(FileSize).ReturnFileSize()
' 数字千分位
Dim Amount As Currency
Amount = 1234567.89
lblAmount.Caption = VBMAN.Formater.Data(Amount).ReturnNumber(2)
' 相对时间
Dim LastTime As Currency
LastTime = GetLastLoginTime() ' Unix 时间戳
lblLastLogin.Caption = VBMAN.Formater.Data(LastTime).ReturnRelativeTime()
End Sub