• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Tìm hiểu các lệnh về String

Các bài viết hướng dẫn về Visual Basic .NET và C#

Điều hành viên: tungcan5diop, QUANITGROBEST

Hình đại diện của người dùng
bangnhatquang68
Guru
Guru
Bài viết: 790
Ngày tham gia: T.Ba 26/01/2010 12:44 pm
Đến từ: Vĩ tuyến 17
Has thanked: 20 time
Been thanked: 37 time
Liên hệ:

Tìm hiểu các lệnh về String

Gửi bàigửi bởi bangnhatquang68 » T.Hai 17/01/2011 8:39 am

Tên bài viết: Tìm hiểu các lệnh về String
Tác giả: Băng Nhật Quang
Cấp độ bài viết: Cơ bản
Tóm tắt: Trong thực tế, khi làm việc với chuỗi đa phần thiên về thuật toán nhưng nếu ta nắm vững các lệnh có sẵn của .net thì rất tiện lợi. Nhớ các lệnh string, hiểu nó vận dụng nó thì không phải dễ dàng. Đặc biệt, các new Member mới vô .net như tui thì từ từ ngâm ngâm cho kĩ. Nên mạo muội thỉnh thoảng chơi vài dòng lệnh string mà có thể đã hiểu hoặc hiểu sơ qua.Vì tìm trong 4rum mà không thấy. Nên làm cái bài thống kê lại lệnh cho tiện anh em tra cứu! Từ từ lâu lâu chơi một cái!!


Tui trình bày theo cách tui hiểu, không phải ngôn ngữ chuyên ngành hay văn phong bác học. nên có thể gây khó ( khó đọc, khó quen, khó chịu) nên ... (:|

Ghi chú không chê trách ( qua tin nhắn), không bình luận ( qua mục vb.net mà nói), chửi bới ( qua giao lưu)...để không spam làm ngắt quãng bài viết, còn nữa.. từ từ để tui xẻ thịt thằng string
1. Hàm so chuỗi
a.CompareOrdinal
- Hiểu: So chuỗi theo giá trị hơn thua trong bản mã unicode
độ hơn thua = String.CompareOrdinal(giá trị A, giá trị B)
- Cấu trúc :
  1. Imports System
  2. Imports Microsoft.VisualBasic
  3. ....................................
  4. Dim strA As String
  5. Dim strB As String
  6. Dim returnValue As Integer
  7. returnValue = String.CompareOrdinal(strA,trB)
  8.  


- Ví dụ :
strA= "abcd" =>(97)+(98)+(99)+(100) =394
strB = "abcE" => (97)+(98)+(99)+(69) = 363
returnValue = 31 => 394-363

- Ý nghĩa và Vận dụng
+ Suy đoán : Chuyển ký tự sang giá trị unicode sau đó tính tổng giá trị từng chuổi, sau lấy hiệu
+ returnValue >0 thì strA > StrB về tổng giá trị unicode
+ returnValue < 0 thì strA < StrB về tổng giá trị unicode
+ returnValue = 0 thì strA = StrB về tổng giá trị unicode => strA = strB

- Xây dựng code dựa trên thuật toán hiểu
control : 1 button, 2 textbox, 1 listbox,axscripcontrol
using : axscripcontrol được add vào bởi script control object

  1. Public Class Form1
  2.     Function thay(ByVal str As String) As String
  3.         For i As Double = 0 To 65533
  4.             str = Replace(str, ChrW(i), "+(" + i.ToString + ")")
  5.         Next
  6.         thay = str.Remove(0, 1)
  7.     End Function
  8.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  9.         TextBox1.Text = thay(TextBox1.Text)
  10.         TextBox2.Text = thay(TextBox2.Text)
  11.         ListBox1.Items.Add(AxScriptControl1.Eval(TextBox1.Text) - AxScriptControl1.Eval(TextBox2.Text))
  12.     End Sub
  13.     Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
  14.         ListBox1.Items.Clear()
  15.     End Sub
  16. End Class
  17.  

-----------------------------------------------------------------------------------------------------------------
b.String.Compare
- Hiểu: So chuỗi theo giá trị hơn thua (hơn bao nhiêu không cần biết, tóm lại ai hơn ai)
độ hơn thua = String.Compare (giá trị A, giá trị B)
- Cấu trúc :
  1. Dim strA As String
  2. Dim strB As String
  3. Dim returnValue As Integer
  4. returnValue = String.CompareOrdinal(strA,trB)
  5.  


- Ví dụ :
strA= "abcd" =>(97)+(98)+(99)+(100) =394
strB = "abcE" => (97)+(98)+(99)+(69) = 363
returnValue >0 <= 394 >363

- Ý nghĩa và Vận dụng
+ Suy đoán : Chuyển ký tự sang giá trị unicode sau đó tính tổng giá trị từng chuổi, sau lấy hiệu xem dương hay âm
+ returnValue >0 thì strA > StrB
+ returnValue < 0 thì strA < StrB
+ returnValue = 0 thì strA = StrB
-----------------------------------------------------------------------------------------------------------------
b.CompareTo
- Hiểu: So chuỗi theo giá trị hơn thua (hơn bao nhiêu không cần biết, tóm lại ai hơn ai)
độ hơn thua = String.Compare (giá trị A, giá trị B)
- Cấu trúc :
  1. Dim strA As String
  2. Dim strB As String
  3. Dim returnValue As Integer
  4. returnValue = strA.CompareTo(strB)
  5.  


- Ví dụ :
strA= "abcd" =>394
strB = "abcE" => 363
returnValue >0 <= 394 >363

- Ý nghĩa và Vận dụng
+ Suy đoán : Chuyển ký tự sang giá trị unicode sau đó tính tổng giá trị từng chuổi, sau lấy hiệu xem dương hay âm
+ returnValue >0 thì strA > StrB
+ returnValue < 0 thì strA < StrB
+ returnValue = 0 thì strA = StrB

---------------------------------------------------------------------------------------------------------------
Kết luận: về hàm so chuỗi!!
Ý tưởng về so chuỗi có thể có nhiều cách khác nhau, tùy trường hợp để sử dụng:
- Dùng phương thức sắp xếp ký tự để so:
+ Ví dụ: abfeg ---> abefg
acbfe ---> abcef
+ Đọc từng ký tự chuỗi này so với từng ký tự chuỗi kia,nếu mã unicode của nó lớn hơn thì thôi!
Nhưng coi ra, code nó dài và phức tạp hơn!!



Hình đại diện của người dùng
bangnhatquang68
Guru
Guru
Bài viết: 790
Ngày tham gia: T.Ba 26/01/2010 12:44 pm
Đến từ: Vĩ tuyến 17
Has thanked: 20 time
Been thanked: 37 time
Liên hệ:

Re: Tìm hiểu các lệnh về String

Gửi bàigửi bởi bangnhatquang68 » T.Hai 17/01/2011 9:44 am

2. Hàm Nối chuỗi

a. String.Concat
- Hiểu: ghép tất cả các phần tử trong mảng string thành một chuỗi, hoặc ghép 2 chuỗi con
- Cấu trúc :
  1. Dim values As String()
  2. Dim returnValue As String
  3. returnValue = String.Concat(values)
  4.  


- Ví dụ :
Dim arr As String() = {"a", "b", "df"}
Dim str As String = String.Concat(arr) =>str = "abdf"

- Ý nghĩa và Vận dụng
+ cho vòng for next duyệt hết các phần tử : str += arr (i)
+ dùng cái này cho nhanh khi nối chuổi mảng
+ nếu 2 phần tử :
  1. Dim strA As String
  2. Dim strB As String
  3. Dim returnValue As String
  4. returnValue = String.Concat(strA, strB)

+ người ta thường xài kiểu :
returnValue = strA + strB
hoặc
returnValue = strA & strB

-------------------------------------------------------------------------------------------------------------
a. Join
- Hiểu: Ghép tất cả các phần tử trong mảng string thành một chuỗi có phân cách bởi ký tự
- Cấu trúc :
  1. Dim kituchen As String
  2. Dim arr As String()
  3. Dim str As String
  4. str = String.Join(kituchen,arr)
  5.  

- Ví dụ :
  1.  
  2. Dim arr As String() = {"a", "b", "df", "sdg", "asdgas"}
  3. Dim chen As String = "/"
  4. Dim str As String = Join(arr, chen)
  5.  


- Ghi chú : nếu chen = notthing thì hàm join chính là hàm concat

------------------------------------------------------------------------------------------------------
Sửa lần cuối bởi bangnhatquang68 vào ngày T.Năm 20/01/2011 11:18 pm với 1 lần sửa.

Hình đại diện của người dùng
bangnhatquang68
Guru
Guru
Bài viết: 790
Ngày tham gia: T.Ba 26/01/2010 12:44 pm
Đến từ: Vĩ tuyến 17
Has thanked: 20 time
Been thanked: 37 time
Liên hệ:

Re: Tìm hiểu các lệnh về String

Gửi bàigửi bởi bangnhatquang68 » T.Năm 20/01/2011 11:18 pm

3. Hàm Tách Chuỗi

a. Split

- Hiểu: Ta có một cái chuỗi dài dài, ta sẽ cắt nó từng khúc, đem từng khúc cho vô mảng,
muốn cắt thì phải có điểm đánh dấu để mà cắt cho bằng nhau!
- Cấu trúc :

  1. Dim chuoi As String
  2. Dim kytu As string
  3. Dim arr As String()
  4. arr =Split(chuoi,kytu)
  5.  

- Ví dụ :
Dim chuoi As String = "cau/lac/bo/vb/.net"
Dim kytu As String = "/"
Dim arr As String()
arr = Split(chuoi, kytu)

- Ý nghĩa và Vận dụng:
+ tách chuỗi: nếu "cau lac bo vb" thì các ký tự phân cách là " "
+ ngoài ra:
sử dụng lệnh tương đương là:
Dim chuoi As String
Dim kytu As string
Dim arr As String()
arr =chuoi.Split(kytu)


-----------------------------------------------------------------------------------------------------------

b. Split char[]

- Hiểu: ta có một chuỗi mà các ký tự phân cách lộn xộn thì phải làm sao?
ví dụ : "cau/lac#bo?vb*.net"
giờ tui muốn tách : "cau" "lac" "bo" "vb" ".net"
thì phải làm sao?
=> các ký tự để xác định điểm tách : "/","#","?"."*"
- Cấu trúc :

  1. Dim chuoi As String
  2. Dim kytu As Char()
  3. Dim arr As String()
  4. arr =Split(chuoi,kytu)
  5.  


- Ví dụ :
+ viết cho gọn lại:
Dim chuoi As String = "cau/lac#bo?vb*.net"
Dim kytu As Char() = {"/", "#", "?", "*"}
Dim arr As String() =chuoi.Split(kytu)

- Ý nghĩa và Vận dụng:
+ tách chuỗi: phức tạp

--------------------------------------------------------------------------------------------------------
c. String.Split ( char[],, Int32)
- Hiểu: ta có một chuỗi mà các ký tự phân cách lộn xộn, và tôi muốn tách vài ba ký tự thôi
ví dụ : "cau/lac#bo?vb*.net"
giờ tui muốn tách làm 3 : "cau" "lac" "bo?vb*.net"
thì phải làm sao?
=> các ký tự để xác định điểm tách : "/","#","?"."*"
=> số tách là : 3
- Cấu trúc :

  1. Dim chuoi As String
  2. Dim kytu As Char()
  3. dim count as interger
  4. Dim arr As String()
  5. arr =Split(chuoi,kytu)
  6.  


- Ví dụ :
Dim chuoi As String = "cau/lac#bo?vb*.net"
Dim kytu As Char() = {"/", "#", "?", "*"}
Dim count As integer = 3
Dim arr As String() = chuoi.Split(kytu)
' kết quả: "cau"; "lac"; "bo?vb*.net"
- Ý nghĩa và Vận dụng:
+ tách chuỗi: phức tạp, tách bao nhiêu tùy bạn, miễn là đừng tách hết vì đã có hướng dẫn trên cho gọn
------------------------------------------------------------------------------------------------------------------
c. String.Split ( Char[], StringSplitOptions )
- Hiểu: bạn có chuỗi như thế này: "cau////lac#####bo??vb**.net"
bạn muốn tách ra : "cau" ; "lac" ; "bo" ; "vb" ; ".net"
vậy bạn làm sao? khi các ký tự phân cách lại lặp lại nhiều như vậy?
vi dụ :
Dim chuoi As String = "cau////lac#####bo??vb**.net"
Dim kytu As Char() = {"/", "#", "?", "*"}
nếu sử dụng string.split ( chuoi,kytu) kết quả là " cau____ " ; "lac______ " ; " bo__ " ; "vb__ " ; "net"
tức có các khoảng trống
vậy làm sao xóa các khoảng trống đó?
sử dụng thuộc tính :StringSplitOptions.RemoveEmptyEntries
- Cấu trúc :
  1.  Dim chuoi As String
  2.         Dim kytu As Char()
  3.        Dim arr As String() = chuoi.Split(kytu, StringSplitOptions.RemoveEmptyEntries)

- Ví dụ :
  1. Dim chuoi As String = "cau////lac#####bo??vb**.net"
  2.         Dim kytu As Char() = {"/", "#", "?", "*"}
  3.         Dim count As Integer = 3
  4.         Dim arr As String() = chuoi.Split(kytu, StringSplitOptions.RemoveEmptyEntries)
  5. 'tách ra : "cau"     ;     "lac"     ;         "bo"     ;      "vb"  ;   ".net"

- Ý nghĩa và Vận dụng:
+ thuộc tính : StringSplitOptions.RemoveEmptyEntries : xóa bỏ khoảng trống
+ thuộc tính : StringSplitOptions.None : giữ nguyên khoảng trống
- Vận dụng:
+ Có thể dùng các lệnh : string.split (chuoi, count, StringSplitOptions.RemoveEmptyEntries) để xác định số ký tự cần tách
+ Có thể dùng mảng các ký tự dùng phân tách: char() hoặc dùng tách với một ký tự mà thôi
Mời anh em lên facebook giao lưu nào!
http://www.facebook.com/groups/145823032176611/

Hình đại diện của người dùng
bangnhatquang68
Guru
Guru
Bài viết: 790
Ngày tham gia: T.Ba 26/01/2010 12:44 pm
Đến từ: Vĩ tuyến 17
Has thanked: 20 time
Been thanked: 37 time
Liên hệ:

Re: Tìm hiểu các lệnh về String

Gửi bàigửi bởi bangnhatquang68 » T.Bảy 22/01/2011 1:06 pm

3. Hàm Tách Từ thành mảng
a. String.ToCharArray
- Hiểu :
+ bạn có chuỗi : "băng nhật quang"
+ bạn muốn tách từng ký tự của nó và đưa vào mảng
- Cấu trúc :
  1. Dim str As String
  2. Dim arr As Char()
  3.  
  4. arr= str.ToCharArray()
  5.  

- Ví dụ :
Dim s As String = "bang nhat quang"
Dim arr As Char() = s.ToCharArray()
MsgBox(arr(4))

-----------------------------------------------------------------------------------------------------------------
a. String.ToCharArray
- Hiểu :
+ bạn có chuỗi : "băng nhật quang"
+ bạn muốn tách một vài ký tự của nó
- Cấu trúc :
  1. Dim str As String
  2. Dim arr As Char()
  3. Dim vitri as integer
  4. Dim  dodai as integer
  5. arr= str.ToCharArray(vitri,dodai)
  6.  

- Ví dụ :
Dim s As String = "bang nhat quang"
Dim arr As Char() = s.ToCharArray(2,4)
MsgBox(arr(4))

kết quả : "n", "g", "" , "n"

-----------------------------------------------------------------------------------------------------------------
a. String.Chars
- Hiểu :
+ bạn có chuỗi : "băng nhật quang"
+ bạn muốn lấy ký tự bấy kỳ nào đó trong chuỗi, ví dụ lấy ký tự :"g"

- Cấu trúc :
  1. Dim str As String
  2. Dim index As Integer
  3. Dim kytu As Char
  4. kytu = str.Chars(index)
  5.  

- Ví dụ :
Dim s As String = "bang nhat quang"
MsgBox(s.Chars(3))

kết quả : "g",
- Vận dụng
- duyệt từng ký tự của chuỗi
- xét các chuỗi, chuỗi nào cũng lấy ký tự tai một vị trí xác định
- chú ý: nó lấy theo mảng:trong chuỗi : "bang nhat quang"
(0) : "b" - ký tự đầu
(1) : "a" - ký tự hai
(2) : "n" - ký tự ba
(3) : "g" - ký tự bốn

--------------------------------------------------------------------------------------------------
Mời anh em lên facebook giao lưu nào!
http://www.facebook.com/groups/145823032176611/

tieutu8x
Bài viết: 9
Ngày tham gia: T.Ba 20/09/2011 7:37 am

Re: Tìm hiểu các lệnh về String

Gửi bàigửi bởi tieutu8x » CN 20/05/2012 8:42 am

vậy hàm strings.replace thì thế nào, bác xẻ thịt nó nốt đi


Quay về “[.NET] Bài viết hướng dẫn”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách