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
| 上一個:字串 | 目錄 | 下一個:正則表示式 |