【发布时间】:2014-05-18 10:18:29
【问题描述】:
它在某种程度上不适用于斯堪的纳维亚字母。
当我输入@“å”时,有两个字符串“夹在”那个搜索词; 一个字符串以低于“å”的“ø”开头,另一个以“å”开头的字符串。但是,即使我一遍又一遍地使用相同的搜索字符串,即@“å”,此比较代码有时会返回正确的结果,有时会返回错误的结果。有什么我忽略的吗?
编辑:抱歉,它应该是两个不同的 compStrings(如我的代码中所示),我忘记将数字 2 作为后缀。
compString2 表示以å 开头的第二个字符串。 compString 是以 ø 开头的那个。
我需要将搜索字符串与两个字符串进行比较,以确定它是否在这两个字符串之间。
让我用一种更好的方式来表述它,对于那些不知道斯堪的纳维亚字母的人来说,å 就像 c,ø 就像 b,如果搜索字符串是 c,那么它必须在 b 和 c 之间,对吧?
这是我的代码:
NSString *compString = [array objectAtIndex:i]; //i is an incremental number from a for-loop
//norwegian language
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"no_NO"];
if([searchString compare:compString2
options:(NSCaseInsensitiveSearch | NSAnchoredSearch)
range:range
locale:locale] == (NSOrderedAscending | NSOrderedSame)) {
if([searchString compare:compString
options:(NSCaseInsensitiveSearch | NSAnchoredSearch)
range:range
locale:locale] == NSOrderedDescending) {
NSLog(@"found");
}
}
最终编辑:
我发现了问题。解决方案很简单。永远不要做我写的按位或运算符“|”或普通的 OR 运算符“||”。
if([searchString compare:compString
options: NSCaseInsensitiveSearch
range:range locale:locale] == NSOrderedAscending ||
[searchString
compare:compString
options: NSCaseInsensitiveSearch
range:range locale:locale] == NSOrderedSame)
意思是searchString
if([searchString
compare:compString
options: NSCaseInsensitiveSearch
range:range locale:locale] == NSOrderedDescending)
意思是searchString > compString
【问题讨论】:
-
你想达到什么目的?为什么一个
if在另一个里面? -
@Wain 嗨,我已经更新了我的问题。
标签: objective-c string comparison string-comparison