`

ios 模糊搜索 汉字搜索 不分大小写拼音或首字母搜索(要多模糊就有多模糊)

    博客分类:
  • ios
 
阅读更多

模糊搜索越模糊越好,不然很急人的

比如变态产品有个需求:”我是一个老实人“,无论用户输入如下哪个时,都要能搜索出来
我是一个老实人,
老实人,
woshiyigelaoshiren,
WOSHIYIGELAOSHIREN,
wsyglsr,
WSYGLSR,
...

 

NSString *str = @"我是一个老实人";
NSString *transformStr = [NSString tansformToMixedStringWithOriginStr:str];
NSLog(@"转化前: %@", str);
NSLog(@"转化后: %@", transformStr);

// 转化前: 我是一个老实人
// 转化后: 我是一个老实人
,woshiyigelaoshiren,WOSHIYIGELAOSHIREN,wsyglsr,WSYGLSR

 

// 写个NSString分类,方便使用
@interface NSString (LYZ)

+(NSString *)tansformToMixedStringWithOriginStr:(NSString *)originStr;

@end

@implementation NSString (LYZ)

+(NSString *)tansformToMixedStringWithOriginStr:(NSString *)originStr{
    
    // 转成了可变字符串
    NSMutableString *str = [NSMutableString stringWithString:originStr];
    CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformMandarinLatin,NO);
    //再转换为不带声调的拼音
    CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformStripDiacritics,NO);
    NSArray *pinyinArray = [str componentsSeparatedByString:@" "];
    
    NSMutableString *allString = [NSMutableString new];

    // 得到拼音
    NSMutableString *pinyinString = [NSMutableString new];
    for (NSString *s in pinyinArray) {
        [pinyinString appendString:s];
    }
    
    // 得到拼音首字母
    NSMutableString *initialStr = [NSMutableString new];
    for (NSString *s in pinyinArray){
        if (s.length > 0){
            [initialStr appendString:  [s substringToIndex:1]];
        }
    }
    
    [allString appendFormat:@"%@,",originStr];// 添加汉字
    [allString appendFormat:@"%@,",pinyinString]; // 添加小写拼音
    [allString appendFormat:@"%@,",[pinyinString uppercaseString]]; // 添加大写拼音
    [allString appendFormat:@"%@,",initialStr]; // 添加小写首字母
    [allString appendFormat:@"%@",[initialStr uppercaseString]]; // 添加大写首字母

    return [allString copy];
}

 

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics