我在使用NSString caseInsensitiveCompare时看到了一些连线。 对于以下两个字符串:
NSString *str1 = @"Výkazy do poisťovní";
NSString *str2 = @"Vyšlé faktúry 2007.xls";
我使用NSString caseInsensitiveCompare来比较它们,
int ci1 = [str1 caseInsensitiveCompare:str2];
int ci2 = [str2 caseInsensitiveCompare:str1];
由于它们是不同的字符串,我希望上面的代码应该给我1和-1。但令人惊讶的是ci1和ci2都是1.这怎么可能发生?
答案 0 :(得分:1)
当用于显示的字符串时,始终使用当前区域设置。
NSString *str1 = @"Výkazy do poisťovní";
NSString *str2 = @"Vyšlé faktúry 2007.xls";
int ci1 = [str1 compare:str2 options:NSCaseInsensitiveSearch range:NSMakeRange(0, str1.length) locale:[NSLocale currentLocale]];
int ci2 = [str2 compare:str1 options:NSCaseInsensitiveSearch range:NSMakeRange(0, str2.length) locale:[NSLocale currentLocale]];
答案 1 :(得分:0)
您发现了一个错误。在这种情况下,您无法使用头脑简单的caseInsensitiveCompare:
。您必须手动关闭变音符号和大小写,如下所示:
NSComparisonResult ci1 = [str1 compare:str2 options:NSCaseInsensitiveSearch | NSDiacriticInsensitiveSearch range:NSMakeRange(0,str1.length)];
NSComparisonResult ci2 = [str2 compare:str1 options:NSCaseInsensitiveSearch | NSDiacriticInsensitiveSearch range:NSMakeRange(0,str2.length)];