So sánh chuỗi trong Objective-C


92

Tôi hiện đã thiết lập một máy chủ web để giao tiếp qua SOAP với ứng dụng iPhone của mình. Tôi đang trả về một chuỗi chứa GUID và khi tôi cố gắng so sánh chuỗi này với chuỗi khác, tôi nhận được một số kết quả lạ.

Tại sao cái này không cháy? Chắc chắn hai dây là một cặp?

NSString *myString = @"hello world";

if(myString == @"hello world")
    return;

1
Câu hỏi này bây giờ hầu như vô dụng vì ảnh chụp màn hình đã biến mất. Đây là lý do tại sao mã nên được sao chép vào các câu hỏi.
jscs

Tôi nghĩ rằng ảnh chụp màn hình là lỗi, nhưng câu trả lời đã được đưa ra như 2 năm trước!
ingh.am

1
Nhưng không người đọc nào trong tương lai có thể nhìn thấy lỗi hoặc mã bạn đang sử dụng để biết nó có giống với mã của họ hay không, có nghĩa là câu hỏi này không thể giúp ai khác.
jscs

Tôi sẽ tìm kiếm hình ảnh. Tôi hiểu rằng đây giống như một cơ sở tham khảo cho các câu hỏi khác nhưng kết thúc nó bây giờ chỉ là một chút vô nghĩa.
ingh.am

2
Tại sao câu hỏi này được đóng lại? Đó là một câu hỏi hoàn toàn hợp lệ!
ibz

Câu trả lời:


214

Sử dụng -isEqualToString:phương pháp để so sánh giá trị của hai chuỗi. Sử dụng ==toán tử C sẽ chỉ đơn giản là so sánh địa chỉ của các đối tượng.

if ([category isEqualToString:@"Some String"])
{
    // Do stuff...
}

2
AH! Cảm ơn bạn rất nhiều. Cảm thấy như một chút ngu ngốc về điều này!
ingh.am

3
Tôi đoán là trong ObjectiveC ++, bạn có thể tạo quá tải toán tử để cung cấp cho bạn khả năng cú pháp-đường để sử dụng == nhưng không có lập trình viên C có mục tiêu lành mạnh nào làm điều này, vì == chỉ được sử dụng để kiểm tra danh tính trong các đối tượng C mục tiêu.
Warren P

48

Bạn có thể sử dụng so sánh phân biệt chữ hoa chữ thường hoặc không phân biệt chữ hoa chữ thường, tùy thuộc vào nhu cầu của bạn. Phân biệt chữ hoa chữ thường như sau:

if ([category isEqualToString:@"Some String"])
{
   // Both strings are equal without respect to their case.
}

Phân biệt chữ hoa chữ thường như sau:

if ([category compare:@"Some String" options:NSCaseInsensitiveSearch] == NSOrderedSame)
{
   // Both strings are equal with respect to their case.
}

1
Tôi nghĩ nó phải là: ([danh mục so sánh: @ tùy chọn "Một số chuỗi": NSCaseInsensitiveSearch] == NSOrderedSame)
JaakL

9
Hãy cẩn thận với hàm "so sánh" vì nếu chuỗi (trong trường hợp này là "danh mục") là nil, thì so sánh sẽ luôn trả về NSOrderedSame.
nh32rg

Đó là một điểm tuyệt vời @ nh32rg !! +1 cho điều đó! IsEqualToString có vấn đề tương tự không?
badweasel

5

Bạn có thể so sánh chuỗi với các hàm bên dưới.

NSString *first = @"abc";
NSString *second = @"abc";
NSString *third = [[NSString alloc] initWithString:@"abc"];
NSLog(@"%d", (second == third))  
NSLog(@"%d", (first == second)); 
NSLog(@"%d", [first isEqualToString:second]); 
NSLog(@"%d", [first isEqualToString:third]); 

Output will be :-
    0
    1
    1
    1
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.