2024年7月17日 星期三

20.VB.NET 筆記 基礎篇 - 字串 (String)

VB.NET 字串 (String) 筆記 (基礎篇)

VB.NET 字串 (String) 筆記 (基礎篇)

在程式設計中,字串就像是文字的容器,用來儲存和操作各種文字資料字串可以存放任何文字內容,例如人名、地址、訊息等,就像是一個裝著文字的箱子,隨時可以打開來讀取或修改裡面的內容。。透過了解字串的特性和使用方式,就能夠輕鬆地處理程式中的文字資料。

認識字串

字串 (String): 字串是一種用來表示文字資料的資料類型。它由一連串的字元 (Characters) 所組成,可以是任何可見或不可見的字元,例如字母、數字、符號、空格等。在 VB.NET 中,字串屬於參考型別 (Reference Type),使用雙引號 (") 將字串內容括起來。

舉例來說,以下都是有效的字串:

Dim name As String = "John"
Dim message As String = "Hello, world!" 
Dim address As String = "123Main St, New York, NY 10001"
Dim empty As String = ""

VB.NET 中的字串有以下幾個重要特性:

特性 說明
不可變性字串一旦建立就無法修改,任何對字串的操作都會產生新的字串實例。就像是把字寫在紙上,無法直接修改,只能重新寫一遍。 字串是不可變的,也就是說,一旦建立了一個字串,就無法直接修改它的內容。對字串進行任何操作,例如連接、替換、截取等,都會產生一個新的字串實例,而不會改變原來的字串。
大小寫敏感字串區分大小寫,也就是說,"Hello" 和 "hello" 是兩個不同的字串。就像是密碼鎖一樣,大小寫必須完全相同才能打開。 VB.NET 中的字串是大小寫敏感的,也就是說,字串 "Hello" 和 "hello" 是不同的字串。
彈性長度字串的長度可以根據需要自動調整,不需要預先指定。就像是一個可伸縮的容器,無論裝多少文字都能剛剛好。 字串的長度可以根據需要自動調整,不需要在宣告時指定固定的長度。當給字串賦值時,VB.NET 會自動分配合適的記憶體空間來存儲字串的內容。
多行字串字串可以包含多行文字,只需要使用 vbCrLf 常數來表示換行。就像是一本書,可以有多頁的內容。 字串可以包含多行文字,使用 vbCrLf 常數來表示換行符號。

在 VB.NET 中,可以使用 Dim 關鍵字來宣告字串變數,並使用賦值運算子 (=) 來給字串變數賦值。例如:

Dim name As String
name = "John"

Dim message As String = "Hello, world!"

瞭解字串的基本特性和使用方式,對於處理程式中的文字資料非常重要。不僅可以正確地儲存和操作字串,還能夠避免因為字串的不可變性或大小寫敏感而導致的錯誤。

常用字串操作

VB.NET 提供了許多內建的字串函數和方法,可以方便地對字串進行各種操作,例如連接、比較、搜尋、替換、格式化等。以下是一些常用的字串操作:

字串連接

可以使用 & 運算子或 + 運算子來連接兩個或多個字串。例如:

使用的控制項:無
Dim firstName As String = "John"
Dim lastName As String = "Doe"
Dim fullName As String = firstName & " " & lastName '結果為 "John Doe"

Dim message As String = "Hello, " + fullName '結果為 "Hello, John Doe"

除了使用運算子外,還可以使用 String.Concat 方法來連接字串,它可以接受多個字串參數。例如:

Dim result As String = String.Concat("Hello, ", "world", "!") '結果為 "Hello, world!"

字串比較

可以使用比較運算子 (=, <>, <, >, <=, >=) 或 String.Compare 方法來比較兩個字串。例如:

使用的控制項:無
Dim str1 As String = "hello"
Dim str2 As String = "world"

If str1 = str2 Then
    MessageBox.Show("兩個字串相等")
Else
    MessageBox.Show("兩個字串不相等")  
End If

Dim result As Integer = String.Compare(str1, str2)
If result < 0 Then
    MessageBox.Show("str1 小於 str2")
ElseIf result > 0 Then  
    MessageBox.Show("str1 大於 str2")
Else
    MessageBox.Show("str1 等於 str2")  
End If

需要注意的是,字串的比較是區分大小寫的。如果要進行不區分大小寫的比較,可以使用 String.Compare 方法並指定 StringComparison.OrdinalIgnoreCase 參數。例如:

Dim result As Integer = String.Compare("Hello", "hello", StringComparison.OrdinalIgnoreCase)
MessageBox.Show("兩個字串是否相等:" & (result = 0).ToString())

可以使用 String.ContainsString.IndexOfString.LastIndexOf 等方法來搜尋字串中是否包含指定的子字串,以及子字串出現的位置。例如:

使用的控制項:
  • Label1:用來顯示搜尋結果。
Dim str As String = "Hello, world!"  

If str.Contains("world") Then
    Label1.Text = "字串包含 'world'"
End If

Dim index As Integer = str.IndexOf("world")
If index >= 0 Then  
    Label1.Text = "'world' 出現在位置 " & index
End If

Dim lastIndex As Integer = str.LastIndexOf("o")  
If lastIndex >= 0 Then
    Label1.Text = "最後一個 'o' 出現在位置 " & lastIndex  
End If

String.IndexOfString.LastIndexOf 方法還可以指定搜尋的起始位置和結束位置,以進行更精確的搜尋。

方法 說明
String.Replace 將字串中指定的子字串替換為另一個子字串。
String.ToUpper 將字串轉換為大寫形式。
String.ToLower 將字串轉換為小寫形式。
String.Trim 移除字串開頭和結尾的空白字元。

字串修改

由於字串的不可變性,對字串進行修改實際上是創建一個新的字串實例。可以使用上述的方法來修改字串。例如:

使用的控制項:
  • Label1:用來顯示修改後的字串。
Dim str As String = "  Hello, world!  "

Dim newStr As String = str.Replace("world", "universe")   
Label1.Text = "替換後:" & newStr '顯示 "  Hello, universe!  "

Dim upperStr As String = str.ToUpper()  
Label1.Text = "轉換為大寫:" & upperStr '顯示 "  HELLO, WORLD!  "

Dim lowerStr As String = str.ToLower()    
Label1.Text = "轉換為小寫:" & lowerStr '顯示 "  hello, world!  "  

Dim trimmedStr As String = str.Trim()
Label1.Text = "移除首尾空白:" & trimmedStr '顯示 "Hello, world!"  

需要注意的是,這些方法都會返回一個新的字串實例,原來的字串不會被修改。

字串格式化

可以使用 String.Format 方法或字串插值 ($"...") 來格式化字串。例如:

使用的控制項:
  • Label1:用來顯示格式化後的字串。
Dim name As String = "John"  
Dim age As Integer = 25

'使用 String.Format  
Dim str1 As String = String.Format("My name is {0} and I am {1} years old.", name, age)  
Label1.Text = str1

'使用字串插值    
Dim str2 As String = $"My name is {name} and I am {age} years old."  
Label1.Text = str2
  

字串格式化可以方便地將不同類型的值插入到字串中,並控制值的格式。例如,可以指定數字的小數位數、日期的格式等。

熟悉常用的字串操作,可以提高處理文字資料的效率,並寫出更加簡潔、易讀的程式碼。在實際開發中,靈活運用這些字串操作,可以大大簡化字串處理的過程。

使用 StringBuilder

StringBuilder: StringBuilder 是一個可變的字串類別,它提供了一種高效的方式來處理大量的字串修改操作。與普通的字串不同,StringBuilder 在修改字串時不會創建新的字串實例,而是直接修改內部的字元緩沖區,因此在進行大量字串操作時,使用 StringBuilder 可以顯著提高性能。

以下是一個使用 StringBuilder 的例子:

Imports System.Text    

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load  
        Dim sb As New StringBuilder()  

        sb.Append("Hello, ")    
        sb.Append("world!")
        sb.AppendLine()   
        sb.Append("This is a new line.")  

        Label1.Text = sb.ToString() '顯示 StringBuilder 的內容    
    End Sub
End Class
  

在這個例子中,我們創建了一個 StringBuilder 實例 sb,然後使用 Append 方法向其中追加字串。AppendLine 方法會在追加字串後自動添加一個換行符。最後,我們使用 ToString 方法將 StringBuilder 轉換為普通的字串,並將其顯示在 Label1 中。

StringBuilder 提供了許多其他有用的方法,例如:

方法 說明
Insert 在指定位置插入字串。
Remove 移除指定範圍內的字元。
Replace 替換指定範圍內的字元。
Clear 清空 StringBuilder 中的所有字元。

在處理大量字串操作時,使用 StringBuilder 可以顯著提高性能。特別是在迴圈中進行字串連接時,使用 StringBuilder 可以避免創建大量的中間字串實例,從而提高程式的效率。

字串應用範例

讓我們通過一個完整的範例來進一步理解字串在實際應用中的使用方式。在這個範例中,將創建一個簡單的字串處理程式,展示各種常見的字串操作。

範例:簡單的字串處理程式

這個範例允許使用者輸入一個字串,然後對字串進行一系列的操作,包括統計字串長度、轉換大小寫、替換子字串、擷取子字串等。最後,將處理後的結果顯示出來。

使用的控制項:
  • TextBox1:用來輸入字串。
  • Button1:用來觸發字串處理。
  • Label1:用來顯示處理後的結果。

首先,在表單上添加相應的控制項,然後編寫以下程式碼:

Imports System 
Imports System.Text

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim inputStr As String = TextBox1.Text 

        '統計字串長度
        Dim length As Integer = inputStr.Length

        '轉換大小寫 
        Dim upperStr As String = inputStr.ToUpper()
        Dim lowerStr As String = inputStr.ToLower()

        '替換子字串
        Dim replacedStr As String = inputStr.Replace("world", "universe")

        '擷取子字串
        Dim substring As String = inputStr.Substring(0, 5)

        '使用 StringBuilder 構建結果字串
        Dim sb As New StringBuilder()
        sb.AppendLine("原始字串:" & inputStr)
        sb.AppendLine("字串長度:" & length)
        sb.AppendLine("大寫字串:" & upperStr)
        sb.AppendLine("小寫字串:" & lowerStr)
        sb.AppendLine("替換後的字串:" & replacedStr)
        sb.AppendLine("子字串:" & substring)

        '顯示結果
        Label1.Text = sb.ToString()
    End Sub
End Class

程式步驟:

  1. 當使用者點擊 Button1 時,觸發 Button1_Click 事件。
  2. 從 TextBox1 中取得使用者輸入的字串,存儲在 inputStr 變數中。
  3. 使用 String.Length 屬性統計字串的長度,存儲在 length 變數中。
  4. 使用 String.ToUpper()String.ToLower() 方法將字串轉換為大寫和小寫,分別存儲在 upperStrlowerStr 變數中。
  5. 使用 String.Replace() 方法將字串中的 "world" 替換為 "universe",存儲在 replacedStr 變數中。
  6. 使用 String.Substring() 方法擷取字串的前 5 個字元,存儲在 substring 變數中。
  7. 創建一個 StringBuilder 實例 sb,使用 AppendLine() 方法將處理後的結果逐行追加到 StringBuilder 中。
  8. 使用 StringBuilder.ToString() 方法將 StringBuilder 轉換為字串,並將結果顯示在 Label1 中。

這個範例展示了字串在實際應用中的常見操作,包括統計長度、大小寫轉換、替換子字串、擷取子字串等。通過使用字串的各種方法和屬性,可以方便地對字串進行處理和操作。同時,使用 StringBuilder 可以高效地構建複雜的字串結果。