Objective-C中的字符串比较


92

目前,我已经建立了一个Web服务器,可以通过SOAP与iPhone应用程序进行通信。我返回一个包含GUID的字符串,当我尝试将其与另一个字符串进行比较时,得到一些奇怪的结果。

为什么不点火?两个字符串肯定匹配吗?

NSString *myString = @"hello world";

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

1
现在这个问题几乎没有用,因为屏幕截图已消失。这就是为什么应将代码复制粘贴到问题中的原因。
jscs 2012年

屏幕截图是我认为的错误,但答案却像2年前一样!
ingh.am 2012年

1
但是,将来没有读者可以看到该错误或您所使用的代码来确定它们是否与它们相同,这意味着该问题无法帮助其他任何人。
jscs 2012年

我将寻找图像。我知道这就像是其他问题的参考基础,但是现在将其关闭只是没有意义。
ingh.am 2012年

2
为什么这个问题关闭?这是一个完全正确的问题!
ibz

Answers:


213

使用该-isEqualToString:方法比较两个字符串的值。使用C ==运算符将只比较对象的地址。

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

2
啊!非常感谢您。觉得这有点傻瓜!
ingh.am 2010年

3
我的猜测是,在ObjectiveC ++中,您可以创建一个运算符重载,以在语法上给您提供使用==的能力,但没有理智的目标C程序员会这样做,因为==仅用于目标C对象中的身份检查。
沃伦·P

48

您可以根据需要使用区分大小写或不区分大小写的比较。区分大小写是这样的:

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

不区分大小写的是这样的:

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

1
我认为应该是:([类别比较:@“某些字符串”选项:NSCaseInsensitiveSearch] == NSOrderedSame)
JaakL 2012年

9
请小心使用“比较”功能,因为如果字符串(在本例中为“类别”)为nil,则compare总是返回NSOrderedSame。
nh32rg 2013年

@ nh32rg太好了!!为此+1!isEqualToString是否有相同的问题?
badweasel

5

您可以将字符串与以下功能进行比较。

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.