使用compare比较不同长度的字符串:options:range:产生错误的结果

时间:2012-05-25 19:44:37

标签: objective-c cocoa-touch nsstring string-comparison

为什么这种比较会导致NO

BOOL areTheSame = NSOrderedSame == [@"th" compare:@"They" options:NSCaseInsensitiveSearch range:NSMakeRange(0, 2)];

当我在@"th"@"Th"上对其进行测试时,YES

我在这里缺少什么?

1 个答案:

答案 0 :(得分:6)

这是违反直觉的,但range参数仅适用于接收器。另一个字符串的长度(compare:的参数)不受范围限制。您的通话会将@"th"缩小到范围{0,2},这会产生@"th"(即,这没有效果),然后将其与@"They"进行比较。

你会看到这个:

NSComparisonResult comp = [@"They" compare:@"th" 
                                   options:NSCaseInsensitiveSearch 
                                     range:NSMakeRange(0, 2)];
BOOL areTheSame = comp == NSOrderedSame;

产生您期望的结果,因为它会将接收器(@"They")向下切割(到@"Th"),然后进行比较。