iPhone:NSComparisonResult和NSDiacriticInsensitiveSearch发行斯堪的纳维亚字母

时间:2011-08-15 22:47:43

标签: iphone

我使用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])];
        }

有谁知道||之间的区别是什么和|如果逻辑?

1 个答案:

答案 0 :(得分:1)

有谁知道什么是||之间的区别和|如果是逻辑?

你不能用“|”在这种情况下,因为它是一个按位OR运算符。 “||”是一个布尔逻辑运算符,它不能作为按位OR使用位。