Skip to content

Tools - 字符串工具类

cToolsStr - 字符串处理工具

概述

提供丰富的字符串处理功能,包括正则提取、行分割、编码检测、字符串切片、随机字符串生成等。


文本分割与合并

ParseNumbers

从字符串中提取数字(支持小数)。

vb
Function ParseNumbers(inputString As String, Optional DecimalPlaces As Long = -1, Optional Count As Long) As Collection

参数:

参数名类型说明
inputStringString输入字符串
DecimalPlacesLong小数位数,-1表示不处理
CountLong提取个数限制,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 n

SplitLinesToCollection

将文本按行分割为集合。

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)  ' 输出: Line1

JoinLinesFromCollection

将行集合合并为字符串。

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\nLine2

SplitLines

将文本按行分割为数组。

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  ' 输出: 4

HasStrFromRight

从右侧开始检查字符串是否包含子串。

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")  ' 输出: False

IsString

检查变量是否为字符串类型。

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

参数:

参数名类型说明
ArrString源字符串
StartPosLong起始位置(0-based)
EndPosLong结束位置(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  ' 输出: World

SubStr

截取任意位置字符串(根据起始和结束标记)。

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

参数:

参数名类型说明
TxtString源字符串
txtFirstString起始标记
txtEndString结束标记,为空则取到末尾
RetIntBoolean未找到时返回"0"而不是空字符串
MethodVbCompareMethod比较方式
FindFromEndBoolean从末尾开始查找结束标记

示例:

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  ' 输出: /div

MidEx

截取任意位置字符串(支持起始位置)。

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

参数:

参数名类型说明
TextString源字符串
IsLeftBoolean是否去除左侧空白
IsRightBoolean是否去除右侧空白

示例:

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 World

RightEx / 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)    ' 输出: Hello

InsertSpan

每隔指定字符数插入分隔符。

vb
Public Function InsertSpan(ByRef inputStr As String, ByVal Span As String, ByVal SetpNum As Long, Optional HeadFoot As Boolean) As String

参数:

参数名类型说明
inputStrString源字符串
SpanString分隔符
SetpNumLong每隔多少字符插入
HeadFootBoolean是否在首尾也添加分隔符

示例:

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  ' 输出: 43068119891129321X

UnicodeEncode / 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  ' 输出: Hello

LenBytes

计算字节数组长度。

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)  ' 输出: 5

ToHex / 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

参数:

参数名类型说明
LensLong字符串长度
ZuheString字符组合: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

参数:

参数名类型说明
isFullBoolean是否返回完整格式(包含括号)

示例:

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-17

UniVbCrLf

统一换行符为 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\nLine3

GetFirstChar / 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)  ' 输出: Hello

cFormater - 通用格式化器

概述

支持链式调用的通用格式化类,可格式化文件大小、时间、数字等。

链式入口

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

VB6及其LOGO版权为微软公司所有