比较Cocoa中的字符串

时间:2009-05-19 07:01:36

标签: objective-c cocoa nsstring compare

我试过了:

- (NSString*) generateString
{
    NSString* stringToReturn = @"thisString";
    return stringToReturn;
}

- (void) otherMethod
{
    NSString *returnedString = [self generateString];
    if (returnedString == @"thisString")
    { // Do this }
    else if (returnedString == @"thatString")
    { // Do that }
}

永远不会匹配。

我已经尝试了

if ([returnedString compare:@"thisString"] == 1)

但是,对于我来说,compare方法总是返回1,即使与不同的字符串进行比较也是如此。

这样做的正确方法是什么,我应该得到什么结果?

5 个答案:

答案 0 :(得分:45)

首先,您使用==运算符来比较两个对象指针(类型NSString *)。因此,当指针相同时返回true,而不是在字符串具有相同内容时返回true。如果您想比较两个字符串是否相同,则应使用isEqualToString:isEqual:isEqual:更通用,因为它适用于所有类型的对象。)

其次,compare:会在0NSOrderSame)相同时返回1NSOrderedDescending),当第一个大于第二个时。所以实际上只有当它们不同时才会返回1 (特别是当第一个大于第二个时)。

答案 1 :(得分:12)

[returnedString isEqualToString: @"thisString"]

答案 2 :(得分:5)

比较两个相同的字符串compare将返回NSOrderedSame,即0。它还可以返回NSOrderedAscending, - 1和NSOrderedDescending,1。

您可能更喜欢使用返回YES或NO。的<{3}}

答案 3 :(得分:5)

if ([returnedString isEqualToString:@"thisString"])
    NSLog(@"Equal");
else
    NSLog(@"Not Equal");

答案 4 :(得分:2)

当应用于对象时,==运算符检查指针是否相等。

您必须使用-compare方法或其中一个同伴 - compare:options: - compare:options:range:-compare:options:range:locale:返回NSComparisonResultNSOrderAscendingNSOrderSameNSOrderDescending

如果您只需要进行相等比较,则可以使用-isEqualToString:返回BOOL值。