跳轉到內容

Visual Basic/內建字串函式

來自 Wikibooks,開放世界中的開放書籍

如果兩個字串具有相同的內容,則它們按值相等

  • 如果 "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

連結

用於執行字串連線的運算子是&。運算子+有時可以起到相同的效果,但不總是如此

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$ 在左側時,它不會改變字串的總長度:它只是替換指定的字元數。如果右側指定的字元數少於請求的字元數,則只替換該字元數;如果指定的字元數更多,則只使用請求的字元數。

連結

字串常量

[編輯 | 編輯原始碼]

字串常量可以像其他任何常量一樣宣告

 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"

StartsWith 和 EndsWith

[編輯 | 編輯原始碼]

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"

連結

上一個:字串 目錄 下一個:正則表示式
華夏公益教科書