美文网首页
ios 模糊搜索 汉字搜索 不分大小写拼音或首字母搜索

ios 模糊搜索 汉字搜索 不分大小写拼音或首字母搜索

作者: 木子李55 | 来源:发表于2020-12-02 23:49 被阅读0次
人·狗·秋千.png

今天碰到一个搜索相关的需求:

比如服务超市有个服务:”园林售卡“,无论用户输入如下哪个时,都要能搜索出来
园林售卡,
园林,
yuanlinshouka,
YUANLINSHOUKA,
ylsk,
YLSK,
...

思路:把这个服务的名字转化为一个字符串,该字符串包含这些值即可;

代码:

NSString *str = @"园林售卡";
NSString *transformStr = [NSString tansformToMixedStringWithOriginStr:str];
NSLog(@"转化前: %@", str);
NSLog(@"转化后: %@", transformStr);

// 转化前: 园林售卡
// 转化后: 园林售卡,yuanlinshouka,YUANLINSHOUKA,ylsk,YLSK

   // 写个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];
}

相关文章

网友评论

      本文标题:ios 模糊搜索 汉字搜索 不分大小写拼音或首字母搜索

      本文链接:https://www.haomeiwen.com/subject/gejpwktx.html