【问题标题】:Comparing strings of different lengths with compare:options:range: produces wrong result用 compare:options:range: 比较不同长度的字符串会产生错误的结果
【发布时间】:2012-05-25 19:44:36
【问题描述】:

为什么这个比较结果是NO

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

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

我在这里错过了什么?

【问题讨论】:

  • 有趣的是,比较与“th”和“他们”的行为如何,如果你使用NSCaseInsensitiveSearch有什么区别呢?
  • 使用选项 0 它给出了相同的结果。奇怪..

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


【解决方案1】:

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

你会看到:

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

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

【讨论】:

  • 感谢您的回答。是的,这是 IMO 的设计缺陷。
猜你喜欢
  • 1970-01-01
  • 2015-01-09
  • 2010-12-03
  • 1970-01-01
相关资源
最近更新 更多