今天碰到一个搜索相关的需求:
比如服务超市有个服务:”园林售卡“,无论用户输入如下哪个时,都要能搜索出来
园林售卡,
园林,
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];
}
网友评论