我应该使用哪些搜索和比较选项来搜索中文字符?

时间:2012-03-22 06:14:25

标签: iphone ios nsstring string-comparison

enum {
    NSCaseInsensitiveSearch = 1,
    NSLiteralSearch = 2,
    NSBackwardsSearch = 4,
    NSAnchoredSearch = 8,
    NSNumericSearch = 64,
    NSDiacriticInsensitiveSearch = 128,
    NSWidthInsensitiveSearch = 256,
    NSForcedOrderingSearch = 512,
    NSRegularExpressionSearch = 1024
};

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
    [self.filteredListContent removeAllObjects];
    for (Notice *notice in allNoticeArray)
    {   
        if ([scope isEqualToString:@"标题"]) 
        {
            NSComparisonResult result = [notice.title compare:searchText
                                                      options:NSWidthInsensitiveSearch
                                                        range:NSMakeRange(0, [searchText length])];
            if (result == NSOrderedSame)
            {
                [self.filteredListContent addObject:notice];
            }
        }
    }
}

searchText& notice.title都是中文字符。

那么,我应该使用哪些搜索和比较选项?

提前谢谢你。祝福。

1 个答案:

答案 0 :(得分:1)

我认为NSWidthInsensitiveSearch在您的方案中使用效果很好。 (只需要检查标题是否以关键字开头,对吗?)

汉字中没有案例和变音符号这样的概念。如果您没有NSBackwardsSearch或其他要求的额外要求,NSWidthInsensitiveSearch就可以了,因为您可以忽略西方字符的全宽和半宽形式之间的区别:

  

NSWidthInsensitiveSearch

     

搜索忽略具有全宽和半宽形式的字符的宽度差异,如东亚字符集中所示。

     

例如,使用此选项,全角拉丁小写字母'a'(Unicode代码点U + FF41)等于基本的拉丁小写字母'a'(Unicode代码点U + 0061)。