我使用NSComparisonResult来搜索我的数组,但是当我使用NSDiacriticInsensitiveSearch时,它无法立即找到斯堪的纳维亚字母,例如åæø,但它可以找到á等等字母表。当我删除选项中的NSDiacriticInsensitiveSearch:时,我的搜索酒吧可以立即找到åæø,但忽略à等。
有没有解决方案?
编辑15 8月: 我相信使用NSScanner(虽然我没有这方面的经验)如果在searchstring中检测åæø的逻辑,如果它们存在,那么就没有nsdiactricinsensitivesearch。如果在searchstring中没有åæø,则在nscomparisonresult中包含nsdiactricinsensitivesearch。我会尽快实现这一点,并提供反馈,如果这是否有效。
我的代码:
NSComparisonResult result;
NSString *setext = searchText;
NSScanner *scanner = [NSScanner scannerWithString:setext];
NSString *a = @"å";
while ([scanner isAtEnd] == NO)
{
if ( [scanner scanString:a intoString:NULL])
{
[scanner scanUpToString:a intoString: NULL];
result = [mystr compare:searchText options:(NSCaseInsensitiveSearch)
range:NSMakeRange(0, [searchText length])];
}
else
{
result = [mystr compare:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)
range:NSMakeRange(0, [searchText length])];
}
}
但它比我修改JohnBrighton的解决方案要慢一点:
NSComparisonResult result;
NSString *string = searchText;
NSRange range = [string rangeOfString:@"æ"];
NSRange range2 = [string rangeOfString:@"ø"];
NSRange range3 = [string rangeOfString:@"å"];
if (range.location != NSNotFound || range2.location != NSNotFound || range3.location != NSNotFound )
//if ((range.location != NSNotFound) | (range2.location != NSNotFound ) | (range3.location != NSNotFound ) ) {
{
result = [mystr compare:searchText options:(NSCaseInsensitiveSearch)
range:NSMakeRange(0, [searchText length])];
}
else {
result = [mystr compare:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)
range:NSMakeRange(0, [searchText length])];
}
有谁知道||之间的区别是什么和|如果逻辑?
答案 0 :(得分:1)
有谁知道什么是||之间的区别和|如果是逻辑?
你不能用“|”在这种情况下,因为它是一个按位OR运算符。 “||”是一个布尔逻辑运算符,它不能作为按位OR使用位。