Visual Basic/内置字符串函数
如果两个字符串具有相同的内容,则它们按值相等
- 如果 "Hello" = "Hello" 则 MsgBox "A"
语句Option Compare Text可以放置在模块的顶部,使比较不区分大小写,影响 =, <, >, <=, >=, <>
Option Compare Text
Sub Test()
If "Hello" = "hello" Then MsgBox "A"
If "aaa" < "BBB" Then MsgBox "B"
End Sub
要测试两个字符串是否按引用相等,即它们是否以相同的地址开始,可以使用 StrPtr 函数。
要测试一个字符串是否大于或小于另一个使用词典顺序,可以使用 <, >, <=, >=, <>。要确定一个字符串是否小于另一个,这两个字符串将逐个字符进行比较,一旦发现一个字符串中的一个字符的 ASCII 码小于另一个字符串中对应(相同位置)的字符,则第一个字符串被声明为小于第二个字符串。相反的测试也有效。
另一种测试字符串是否相等或大于另一个的方法是StrComp函数。与 =, <, > 等不同,StrComp 函数有一个可选参数,用于控制比较是否区分大小写。
示例
strHello = "hello": strHello2 = "Hello"
If StrComp(strHello, strHello2, vbTextCompare) = 0 Then
Debug.Print "The strings are the same."
End If
链接
- StrComp 函数,Access 2007,office.microsoft.com
- StrComp 函数,Office 2013,msdn.microsoft.com
用于执行字符串连接的操作符是&。操作符+有时可以起到相同的效果,但不总是如此
a = "123"
b = "456"
c = a & b 'Yields 123456
d = a + b 'Yields 123456: applied to two strings
Debug.Print c, d
a = 123 'A number, not a string
b = "456" 'A string
c = a & b 'Yields 123456
d = a + b 'Yields 579: applied to a number and to a string
Debug.Print c, d
要找出某个字符串是否是另一个字符串的子字符串,请使用 InStr 函数,如下所示
If InStr("Hello","He") > 0 Then
MsgBox "The second string is contained in the first string."
End If
If InStr("He","Hello") > 0 Then
MsgBox "This never gets printed; wrong argument order."
End If
如果找到子字符串,InStr 函数将返回子字符串的位置,否则返回 0。
InStr 函数的双参数用法区分大小写。不区分大小写的包含测试可以按如下方式完成
If InStr(UCase("Hello"), UCase("he")) > 0 Then
MsgBox "The second string is contained in the first string when we " & _
"disregard the case."
End If
要将一个字符串替换为第三个字符串中的另一个字符串,请使用内置函数 Replace,如下所示
Result = Replace("Teh Beatles", "Teh", "The") 'results into "The Beatles"
字符串的使用方式几乎与字符列表相同。字符串中的第 n 个字符可以通过下标返回
Mid$(String1, n, 1)
n 的值从 1 开始而不是从 0 开始。
还可以返回字符串的子字符串。使用相同的函数,但不是指定 1,而是指定子字符串的长度
Offset = 2: Length = 3
Debug.Print Mid$("abcdef", Offset , Length) 'Prints bcd
如果请求的字符数超过可用字符数,则只返回可用的字符,不会引发错误
Debug.Print Mid$("abcdef", 2, 33) 'Prints bcdef
您也可以在赋值语句的左侧使用Mid$
String1 = "aaaaaa"
Debug.Print String1 'Prints aaaaaa
Mid$(String1, 2, 3) = "bbb"
Debug.Print String1 'Prints abbbaa
Mid$(String1, 3, 1) = "cccccc"
Debug.Print String1 'Prints abcbaa
Mid$(String1, 2, 3) = "d"
Debug.Print String1 'Prints adcbaa
当 Mid$ 在左侧时,它不会改变字符串的总长度:它只是替换指定的字符数。如果右侧指定的字符数少于请求的字符数,则只替换该字符数;如果指定的字符数更多,则只使用请求的字符数。
链接
- MID、MIDB,Excel 2003,office.microsoft.com
字符串常量可以像其他任何常量一样声明
Const s As String = "abcdef"
字符串不是对象,因此它们没有方法,但是有一些函数可以操作字符串。请注意,除了在赋值语句的左侧使用 Mid$ 之外,没有一个函数会修改原始字符串
- Asc
- 返回字符串第一个字符的整数代码。反函数是Chr。
- Len
- 返回字符串的长度。
- InStr
- 返回子字符串在字符串中首次出现的位置,如果未找到子字符串,则返回 0。
- InstrB
- 类似于 InStr,但它返回字节位置。需要记住的是,Visual Basic 6 字符串是 Unicode 字符串。
- InstrRev
- 类似于 InStr,但它返回子字符串最后一次出现的字符位置。
- Left$
- 返回字符串开头指定的字符数。如果字符串中的字符数更少,Left$ 将返回整个字符串,不会引发错误,
- Mid$
- 返回从给定位置开始的指定数量的字符,在左侧它会替换这些字符,
- Right$
- 返回字符串末尾指定的字符数,如果字符数不足,则 Right$ 将返回整个字符串。
- IsNumeric
- 如果字符串看起来像数字,则返回 True。
- LTrim$, RTrim$, Trim$
- 分别返回字符串的副本,其中删除了前导空格、尾随空格或前导和尾随空格。请注意,只删除 ASCII 空格(字符代码 32),其他空白字符(如制表符)被视为非空格。
- LCase$, UCase
- 分别将整个字符串转换为小写或大写。
- Val
- 返回一个数字,对应于字符串开头找到的数字。请注意,Val 不是区域设置感知的,这意味着它始终期望小数点,无论您的计算机的区域设置如何;如果您从逗号分隔的文件中读取数据,这可能是您要使用的函数。
- Str
- 返回与给定数字对应的字符串。与Val类似,它不是区域设置感知的。如果您要创建一个包含数字的文本文件,并在其他人的计算机上读取该文件,则应该使用此函数。
- CStr
- 将表达式转换为字符串。此过程是区域设置感知的,是将数字和其他类型的值转换为字符串以便用户显示的正确函数。通常情况下,这是不必要的,因为 Visual Basic 会在必要时自动转换,并使用区域设置来执行此操作。
- Format$
- 使用特定格式将数字转换为字符串。格式以一系列字符的形式提供,这些字符显示了小数点前后应该给出多少位数字。与CStr类似,Format$是区域设置感知的,因此小数点分隔符将是用户区域设置中指定的任何分隔符。Format$还提供将日期转换为各种内置和自定义字符串格式的功能。
- CBool, CByte, CCur, CInt, CLng, CSng, CDbl, CDec
- 区域设置感知的转换到Boolean, Byte, Currency, Integer, Long, Single, Double, Decimal。
- Split
- 将字符串分割成多个片段,并返回一个Variant Array。如果未指定分隔符,则将使用空格。分隔符可以是任何长度的任何字符串。两个相邻的分隔符将分隔一个空字符串。
- Hex$
- 返回一个字符串,其中包含表示数字的十六进制字符。
- Oct$
- 返回一个字符串,其中包含表示数字的八进制字符。
- Replace$
- 返回一个字符串,其中将指定子字符串的所有出现位置替换为新字符串。请注意,子字符串和新字符串不必具有相同的大小。
- StrComp
- 如果第一个字符串小于第二个字符串,则返回 -1;如果它们相同,则返回 0;如果第一个字符串大于第二个字符串,则返回 +1。接收一个可选参数,用于确定比较算法:vbBinary 用于使用字符代码进行精确比较,vbTextCompare 用于不区分大小写的比较。
由于双引号 (") 用于分隔字符串,因此您不能直接使用它来指定字符串中的引号。例如
' Does not work - syntax error Debug.Print "Fred says "Hi" to you"
一种方法是使用 Chr() 函数来指定字符代码 (34)
' Works fine Debug.Print "Fred says " & Chr$(34) & "Hi" & Chr$(34) & " to you"
另一种方法是将双引号加倍。您可能会发现这种方法比上面提到的方法更易读或更难读。
' Works fine too Debug.Print "Fred says ""Hi"" to you"
Visual Basic 没有其他一些编程语言中常见的 "startsWith"(或 "BeginsWith")和 "endsWith" 函数。但它有 "Like" 比较运算符,用于简单的模式匹配,当与 "*" 一起使用时表示“任何字符串”。
If "Hello World" Like "Hello*" Then MsgBox "It starts."
If "Hello World" Like "*World" Then MsgBox "It ends."
If LCase("Hello World") Like "hello*" Then MsgBox "It starts, case insensitive."
If LCase("Hello World") Like "*world" Then MsgBox "It ends, case insensitive."
Ending = "World"
If "Hello World" Like "*" & Ending Then MsgBox "It ends."
此外,您可以使用 "Left" 函数自己编写这些函数。
Function StartsWith(Str1 As String, Str2 As String, Optional CaseIns As Boolean) As Boolean
StartsWith = False
If CaseIns Then 'Case insensitive
If Left(LCase(Str1), Len(Str2)) = LCase(Str2) Then
StartsWith = True
End If
Else
If Left(Str1, Len(Str2)) = Str2 Then
StartsWith = True
End If
End If
End Function
Function EndsWith(Str1 As String, Str2 As String, Optional CaseIns As Boolean) As Boolean
EndsWith = False
If CaseIns Then 'Case insensitive
If Right(LCase(Str1), Len(Str2)) = LCase(Str2) Then
EndsWith = True
End If
Else
If Right(Str1, Len(Str2)) = Str2 Then
EndsWith = True
End If
End If
End Function
对于一次性与常量字符串的比较,函数调用可能有点过头。
If Left(String1, 9) = "Beginning" Then
'Starts with, case-sensitive
...
Else
...
End If
If Right(String1, 3) = "end" Then
'Ends with, case-sensitive
...
Else
...
End If
您可以使用 Like 关键字进行简单的模式匹配;对于复杂的模式匹配,请参阅 正则表达式。Like 模式中的特殊字符包括 ? 用于单个字符,* 用于任意数量的字符,# 用于单个十进制数字,[...] 用于列表中的单个字符,以及 [!...] 用于列表中不存在的单个字符。
示例
If "Hello World" Like "Hello*" Then MsgBox "A"
If "Hello World" Like "*World" Then MsgBox "B"
If "Itam" Like "It?m" Then MsgBox "G"
If "AB345" Like "[A-Z][A-Z]###" Then MsgBox "C"
If "Ab345" Like "[a-zA-Z][a-zA-Z]###" Then MsgBox "D"
If "Item" Like "[!;][!;][!;][!;]" Then MsgBox "E"
If Not "It;m" Like "[!;][!;][!;][!;]" Then MsgBox "F"
链接
- Like 运算符,Visual Basic for Applications,msdn.microsoft.com
- Like 运算符,Visual Studio 2005,msdn.microsoft.com
上一个:字符串 | 目录 | 下一个:正则表达式 |