zoukankan      html  css  js  c++  java
  • IOS-模糊搜索(支持中文,拼音,字母)

    IOS - 模糊搜索

    这里模糊搜索 不是在数据中的,而是在数组,或者你需要的地方

    首先先看一下效果:

    所搜之前:

           

    搜索之后:

       

    下面思路讲解:

    1.定义好需要加载数据的数组

    这里需定义一个模型,加载数组中的内容,在模型中在加入两个变量,一个是拼音,一个是拼音的首字母

    2. 在数组加载到模型中的时候,将数组中的一对象 获取到 拼音,和拼音的首字母

    // pinyin

    - (NSString *)transformToPinyin{

        NSMutableString * mutableString = [NSMutableString stringWithString:self];

        CFStringTransform((CFMutableStringRef) mutableString, NULL, kCFStringTransformToLatin, false);

        mutableString = (NSMutableString *)[mutableString stringByFoldingWithOptions:NSDiacriticInsensitiveSearch locale:[NSLocale currentLocale]];

        mutableString = [[mutableString stringByReplacingOccurrencesOfString:@" " withString:@""] mutableCopy];

        return mutableString.lowercaseString;

    }

    //

    - (NSString * )transformToPinyinFirstLetter{

        NSMutableString * stringM = [NSMutableString string];

        

        NSString * temp = nil;

        for (int i = 0; i < [self length]; i ++) {

            

            temp = [self substringWithRange:NSMakeRange(i, 1)];

            

            NSMutableString * mutableString = [NSMutableString stringWithString:temp];

            

            CFStringTransform((CFMutableStringRef)mutableString, NULL, kCFStringTransformToLatin, false);

            

            mutableString = (NSMutableString *)[mutableString stringByFoldingWithOptions:NSDiacriticInsensitiveSearch locale:[NSLocale currentLocale]];

            

            mutableString = [[mutableString substringToIndex:1] mutableCopy];

            

            [stringM appendString:(NSString *)mutableString];

        }

        return stringM.lowercaseString;

    }

    将这两个方法添加到NSString的分类中,作用是:获取一个字符串对像的拼音,和拼音首字母

    + (NSString *)getPinyinWithString:(NSString *)string{

       

        NSString * pinyin;

        if ([string length]) {

            NSMutableString * ms = [[NSMutableString alloc] initWithString:string];

            if (CFStringTransform((__bridge CFMutableStringRef)ms, 0, kCFStringTransformMandarinLatin, NO)) {

                

            }

            if (CFStringTransform( (__bridge CFMutableStringRef)ms, 0, kCFStringTransformStripDiacritics, NO)) {

            

            }

            pinyin = ms;

        }

        return pinyin;

    }

    + (NSString *)getFirstLetterWithString:(NSString *)string{

       

        NSString * regex = @"^[a-zA-Z]*$";

        NSString * firstLetter = [string substringToIndex:1];

        

        NSPredicate * predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];

        

        if ([predicate evaluateWithObject:firstLetter] == YES) {

            return [firstLetter uppercaseString];

        }else {

            return @"~";

        }

    }

      将汉字转换成拼音

    做好了这些以后,所有就是把你所搜的内容在 模型数组中搜索,所搜到的时候就显示出来

    代码在GitHub上面有需要可以下载看看:https://github.com/Amuxiaomu/SearchDemo

  • 相关阅读:
    Java版本及历史简述
    ASCII、Unicode、UTF-8、UTF-16、GBK、GB2312、ANSI等编码方式简析
    同步(Synchronous)和异步(Asynchronous)方法的区别
    例10-12 *uva1637(概率dp)
    例10-11 uva11181
    例10-10 uva10491(简单概率)
    例10-9 uva1636简单概率问题
    全排列hash-康拓展开
    10-8 uva1262密码
    例10-6 uva1635(唯一分解定理)
  • 原文地址:https://www.cnblogs.com/DreamLinku/p/5743296.html
Copyright © 2011-2022 走看看