|
HỒ LÔ BIẾN |
|
Ai VB.NET hông?
Lớp String
Chương Can Chíp |
|
Lớp
String đóng vai trò quan trọng trong hầu hết dự
án VB.NET. Lớp này rất đặc biệt trong .NET, bởi vì
nó là kiểu nguyên thủy chứ không phải là cấu trúc.
Bảng 1 liệt kê các hành vi (method) và thuộc
tính (property) của lớp String để bạn tham
khảo. Các hành vi ấy được dùng chung cho mọi chuỗi.
Lớp String còn chứa nhiều hành vi khác được
triệu gọi dựa trên một đối tượng String cụ
thể. Các hành vi thuộc lớp String thay thế
các hàm liên quan đến chuỗi trong VB6. |
|
Bảng 1:
Các hành vi và thuộc tính của lớp String |
|
Các
hành vi |
Mô tả |
|
Empty |
Có thể
dùng trong phép so sánh hay khởi tạo một chuỗi rỗng. |
|
Compare |
So sánh
hai đối tượng kiểu String. |
|
CompareOrdinal |
So sánh
hai chuỗi, không xét yếu tố ngôn ngữ, văn hóa địa
phương. |
|
Concat |
Nối một
hay nhiều chuỗi với nhau. |
|
Copy |
Tạo một
chuỗi mới có cùng trị chuỗi gốc. |
|
Equals |
Kiểm tra
hai chuỗi có cùng trị hay không |
|
Toán tử
“=” |
So sánh
hai đối tượng String. |
|
Toán tử
khác nhau |
So sánh
hai đối tượng String. Trả về True nếu hai đối tượng
khác nhau. |
|
Hàm String() |
|
Trong
VB6, hàm String() cho phép tạo một chuỗi từ
một ký tự với số lần lặp xác định, nay không tồn tại
trong VB.NET nữa. Với lớp String, ta có nhiều
cách tạo chuỗi khác nhau. Ví dụ: |
|
Dim
strHangChuoi _
As String
= “ABC”
Dim
strLapLai _
As
String(“A”c, 20) |
|
Bạn để ý,
câu lệnh thứ hai có tác dụng giống hàm String()
của VB6. |
|
Hành vi SubString
|
|
Mặc dù
không bị bỏ đi, các hàm Left, Right và
Mid không được trọng dụng trong VB.NET. Chúng
được thay bằng hành vi SubString dùng để tạo các
chuỗi con. Ví dụ: |
|
Dim
strChuoi As _
String =
“Xin chao”
Debug.WriteLine( _
strChuoi.SubString(0, 5))
Debug.WriteLine( _
strChuoi.SubString(6)) |
|
Câu lệnh
thứ hai lấy 5 ký tự, kể từ vị trí 0. Câu lệnh thứ ba
lấy các ký tự kể từ vị trí 6 trở đi. |
|
|
|
Hành vi PadLeft và PadRight |
|
Các lệnh
LSet và RSet bị bỏ đi và được thay
bằng các hành vi PadLeft và PadRight
để canh chỉnh chuỗi lệch về trái hay phải (bằng cách
đệm các ký tự vào sau hay trước trị chuỗi). Ví dụ: |
|
Dim
strChuoi As _
String =
“Xin chao”
Debug.WriteLine( _
strChuoi.PadLeft(30))
Debug.WriteLine( _
strChuoi.PadLeft(20,”.”c)) |
|
Câu lệnh
thứ hai chèn thêm 22 ký tự trắng vào bên trái chuỗi.
Câu lệnh thứ ba chèn thêm 12 ký tự “.” vào bên trái
chuỗi. |
|
Như bạn
thấy, lớp String trong VB.NET không hoàn toàn
khác kiểu String mà dân lập trình VB đã xài
bấy lâu. Phần lớn các hàm trở thành các hành vi,
cách xử lý chuỗi cũng không thay đổi mấy. Có điều
quan trọng bạn cần chú ý: mỗi lần thực hiện một sửa
đổi với một chuỗi, bạn thu được kết quả là một đối
tượng String mới và chuỗi lúc đầu trở thành … “rác”.
Uổng hết sức! Đoạn mã 1 cho bạn ví dụ về cách dùng
chuỗi không tốt, trong đó mỗi lần phép gán chuỗi xảy
ra (1000 lần), hệ thống sẽ cấp phát một vùng đệm ký
ức mới dựa trên kích thước chuỗi mới (do ghép thêm),
rồi trả ký ức cũ cho hệ thống “tái chế”. Khi vòng
lặp tiếp tục, việc cấp phát ký ức đòi hỏi nhiều ký
ức hơn, dẫn đến mất nhiều thời gian. |
|
Đoạn
mã 1
Dim
strChuoi As String
Dim
intLanLap As Integer
For
intLanLap = 1 To 1000
strChuoi = strChuoi & “Mot chuoi rat dai”
Next
Debug.WriteLine(strChuoi) |
|
Đoạn mã 2
trình bày phương án xử lý tốt hơn nhờ dùng lớp
StringBuilder. Khác với lớp String, lớp
StringBuilder cho phép hiệu chỉnh, bổ sung
nhiều ký tự mà không đòi hỏi việc cấp phát ký ức mới
cho cả chuỗi. Một khi đã dùng VB.NET, bạn nhất định
phải thưởng thức món StringBuilder! |
|
Đoạn
mã 2
Dim
objChuoi As New System.Text.StringBuilder()
Dim
intLanLap As Integer
For
intLanLap = 1 To 1000
objChuoi.Append(“Mot chuoi rat dai”)
Next
Debug.WriteLine(objChuoi.ToString()) |
|
|