iOS开发中如何更快的实现汉字转拼音

来源:互联网 发布:对外经贸大学 知乎 编辑:程序博客网 时间:2024/05/21 07:06

第一阶段:git开源工具:PinYin4Objc

第二阶段:网友推荐方法

- (NSString *)transformToPinyin {    NSMutableString *mutableString = [NSMutableString stringWithString:self];    CFStringTransform((CFMutableStringRef)mutableString, NULL, kCFStringTransformToLatin, false);    CFStringTransform((CFMutableStringRef)mutableString, NULL, kCFStringTransformStripDiacritics, false);    return mutableString;}

第三阶段: 正则表达式优先过滤英文数字特殊字符等
- (NSString *)transformToPinyin {    NSMutableString *mutableString = [NSMutableString stringWithString:self];    BOOL isNeedTransform = ![self isAllEngNumAndSpecialSign];    if (isNeedTransform) {        CFStringTransform((CFMutableStringRef)mutableString, NULL, kCFStringTransformToLatin, false);        CFStringTransform((CFMutableStringRef)mutableString, NULL, kCFStringTransformStripDiacritics, false);    }    return mutableString;} - (BOOL)isAllEngNumAndSpecialSign {    NSString *regularString = @"^[A-Za-z0-9\\p{Z}\\p{P}]+$";    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regularString];    return [predicate evaluateWithObject:self];}

第四阶段:参考http://nshipster.com/cfstringtransform/

- (NSString *)transformToPinyin {    NSMutableString *mutableString = [NSMutableString stringWithString:self];    BOOL isNeedTransform = ![self isAllEngNumAndSpecialSign];    if (isNeedTransform) {        CFStringTransform((CFMutableStringRef)mutableString, NULL, kCFStringTransformToLatin, false);        CFStringTransform((CFMutableStringRef)mutableString, NULL, kCFStringTransformStripCombiningMarks, false);    }    return mutableString;} - (BOOL)isAllEngNumAndSpecialSign {    NSString *regularString = @"^[A-Za-z0-9\\p{Z}\\p{P}]+$";    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regularString];    return [predicate evaluateWithObject:self];}

第五阶段:终极优化版

- (NSString *)transformToPinyin {    NSMutableString *mutableString = [NSMutableString stringWithString:self];    CFStringTransform((CFMutableStringRef)mutableString, NULL, kCFStringTransformToLatin, false);    mutableString = (NSMutableString *)[mutableString stringByFoldingWithOptions:NSDiacriticInsensitiveSearch locale:[NSLocale currentLocale]];    return mutableString;}

Demo移步https://github.com/panghaijiao/PHJTransformPinyinDemo

文章来源:http://www.olinone.com

0 0
原创粉丝点击