2009-05-23 39 views
13

Hy vọng đây là một câu hỏi dễ. Trong java tôi nghĩ rằng nó là compareTo().so sánh các chuỗi trong vb

Làm cách nào để so sánh 2 biến chuỗi để xác định xem chúng có giống nhau không?

ví dụ:

If (string1 = string2 And string3 = string4) Then 
    'perform operation 
Else 
    'perform another operation 
End If 
+0

Vb.net vb.net "cổ điển" này? –

+0

một trong nhà phát triển web trực quan 2008. vb.net tôi giả định –

Trả lời

16

tôi sẽ đề nghị sử dụng phương pháp String.Compare. Sử dụng phương pháp đó, bạn cũng có thể kiểm soát xem có nên thực hiện so sánh phân biệt chữ hoa chữ thường hay không.

mẫu:

Dim str1 As String = "String one" 
Dim str2 As String = str1 
Dim str3 As String = "String three" 
Dim str4 As String = str3 

If String.Compare(str1, str2) = 0 And String.Compare(str3, str4) = 0 Then 
    MessageBox.Show("str1 = str2 And str3 = str4") 
Else 
    MessageBox.Show("Else") 
End If 

Edit: nếu bạn muốn thực hiện một tìm kiếm case-insensitive bạn có thể sử dụng tham số StringComparison:

If String.Compare(str1, str2, StringComparison.InvariantCultureIgnoreCase) = 0 And String.Compare(str3, str4, StringComparison.InvariantCultureIgnoreCase) = 0 Then 
+3

Câu trả lời này là không cần thiết phức tạp. Nếu trường hợp quan trọng, chỉ cần làm "str1 = str2". Để bỏ qua trường hợp, hãy làm "String.Equals (str1, str2, StringComparison.InvariantCultureIgnoreCase)". Hoặc bất kỳ biến thể StringComparison nào phù hợp với nhiệm vụ của bạn. Không cần phải sử dụng 'So sánh', nó sẽ cắt mã bằng' = 0'. Và yêu cầu người đọc suy nghĩ nhiều hơn về mục đích của mã. 'Equals' làm cho mục đích rõ ràng. Chỉ có thời gian tôi sẽ sử dụng 'So sánh' là khi các giá trị khác với' 0' là cần thiết (sắp xếp). – ToolmakerSteve

+1

Thật thú vị khi 'String.Compare (str1, str2)' phôi thành 'False' khi chúng bằng nhau và' True' khi chúng không bằng nhau. – Panzercrisis

+1

@Panzercrisis bạn đang nói với tôi!Tôi đã không đọc câu trả lời này đủ và đã làm một tấn = 1 suy nghĩ = 1 phôi để True ... Tôi sẽ đưa lời khuyên của ToolmakerSteve về decluttering bằng cách sử dụng Equals. Tôi không thấy điều này là "thú vị" như bạn đã nói, tôi coi nó là cực kỳ khó hiểu và không trực quan nếu bạn đã từng mã hóa trước đây, trong đó 0 = false và 1 = true trong hầu hết các trường hợp. – whyoz

11
Dim MyString As String = "Hello World" 
Dim YourString As String = "Hello World" 
Console.WriteLine(String.Equals(MyString, YourString)) 

trả về một bool True. So sánh này phân biệt chữ hoa chữ thường.

Vì vậy, trong ví dụ của bạn,

if String.Equals(string1, string2) and String.Equals(string3, string4) then 
    ' do something 
else 
    ' do something else 
end if 
+0

tính năng này không hoạt động! lấy làm tiếc! –

+0

Tôi nhận được nó từ đây: http://msdn.microsoft.com/en-us/library/fbh501kz(VS.80).aspx –

+1

FYI, Nó hoạt động tốt - Tôi sử dụng nó mọi lúc. Mặc dù trong vb.net và mới hơn, người ta thường sử dụng "AndAlso" thay vì "Và", để chỉ thực hiện so sánh thứ hai nếu cần thiết ("đánh giá ngắn mạch"). – ToolmakerSteve

9

Trong vb.net bạn thực sự có thể so sánh chuỗi với =. Mặc dù String là loại tham chiếu, trong vb.net = trên String đã được định nghĩa lại để so sánh phân biệt chữ hoa chữ thường nội dung của hai chuỗi.

Bạn có thể kiểm tra điều này bằng mã sau. Lưu ý rằng tôi đã lấy một trong các giá trị từ đầu vào của người dùng để đảm bảo rằng trình biên dịch không thể sử dụng cùng một tham chiếu cho hai biến như trình biên dịch Java nếu các biến được định nghĩa từ cùng một chuỗi Chữ. Chạy chương trình, gõ "This" và nhấn < Nhập >.

Sub Main() 
    Dim a As String = New String("This") 
    Dim b As String 

    b = Console.ReadLine() 

    If a = b Then 
     Console.WriteLine("They are equal") 
    Else 
     Console.WriteLine("Not equal") 
    End If 
    Console.ReadLine() 
End Sub 
-3
If String.Compare(string1,string2,True) Then 

    'perform operation 

EndIf 
+0

Điều này dường như không có nhiều chi tiết như câu trả lời được chấp nhận từ vài năm trước. Bất kỳ lý do cụ thể để đăng nó? –

0

Tôi biết điều này đã được trả lời, nhưng trong VB.net trên 2013 (mức thấp nhất Cá nhân tôi đã sử dụng), bạn chỉ có thể so sánh chuỗi với một nhà điều hành =. Đây là cách dễ dàng nhất.

Vì vậy, về cơ bản:

If string1 = string2 Then 
    'do a thing 
End If 
0

Tôi nghĩ String.Equals đây là những gì bạn cần.

Dim aaa = "12/31" 
      Dim a = String.Equals(aaa, "06/30") 

a sẽ trả về false.