objective-c - 比较不同长度的字符串与 compare :options:range: produces wrong result

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

为什么这个比较结果是NO

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

当我在 @"th"@"Th" 上测试它时,它是 YES

我在这里错过了什么?

最佳答案

这是违反直觉的,但是 range 参数仅适用于 receiver。另一个字符串的长度(compare: 的参数)没有范围限制。您的调用将 @"th" 减少到范围 {0,2},这会产生 @"th"(即,这没有效果),然后将其与@“他们”

你会看到:

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

产生您期望的结果,因为它削减了接收者 (@"They")(到 @"Th")然后进行比较。

关于objective-c - 比较不同长度的字符串与 compare :options:range: produces wrong result,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10760504/

相关文章:

Iphone UITableView、单元格和通知 - 通知后单元格未显示正确的图像

ios - 将带有JSON的NSString转换为NSDictionary

ios - Facebook SDK 登录永远不会在 iOS 9 上回调我的应用程序

ios - UITableView :reloadSectionIndexTitles animated correct way

ios - 禁止选择单个 UITableViewCell

ios - UISearchBarDisplayController 与 UINavigationBar 不能很好地配合

ios - 将 NSData 转换为 NSString 返回 nil

ios - stringByReplacingOccurrencesOfString 不适用于空间,即 objective-c 中的 ""

objective-c - 在多维 NSMutableArray 中添加对象

ios - 在 UICollectionView 中以编程方式选择项目