在项目中,需要根据文字或者文字的拼音进行模糊搜索;用过很多第三方库来转化,最后还是感觉Pinyin比较好用;同时汉字中夹杂英文字母也能转。
下面介绍下Pinyin的使用:
1、使用Pinyin之前需要先引入:
#import "pinyin.h"
2、获取某个中文语段的首个文字的拼音首字母:
+(NSString*)getFirstLetterFromZh:(NSString*)zh{
NSString *transformedStr;//转化了的数据
NSString *originStr=[NSString stringWithFormat:@"%@",zh];
if(originStr==nil){
originStr=@"";
}
if(![originStr isEqualToString:@""]){
NSString *pinYinResult=[NSString string];
NSString *singlePinyinLetter=[[NSString stringWithFormat:@"%c",pinyinFirstLetter([originStr characterAtIndex:0])]uppercaseString];
pinYinResult=[pinYinResult stringByAppendingString:singlePinyinLetter];
transformedStr=pinYinResult;
}else{
transformedStr=@"";
}
return transformedStr;
/*
//转成了可变字符串
NSMutableString *str = [NSMutableString stringWithString:zh];
//先转换为带声调的拼音
CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformMandarinLatin,NO);
//再转换为不带声调的拼音
CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformStripDiacritics,NO);
//转化为大写拼音
NSString *pinYin = [str capitalizedString];
//获取并返回首字母
return [pinYin substringToIndex:1];
*/
}
3、获取中文字段的所有文字的拼音首字母:
+(NSString *)getAllFirstLetterFromZh:(NSString *)zh{
NSString *transformedStr;//转化了的数据
NSString *originStr=[NSString stringWithFormat:@"%@",zh];
if(originStr==nil){
originStr=@"";
}
if(![originStr isEqualToString:@""]){
NSString *firstLetters=[[NSString alloc]init];
for(int i = 0; i<originStr.length; i++) {
NSRange range=NSMakeRange(i, 1);
NSString *tmpStr=[originStr substringWithRange:range];
NSString *pinYinResult=[NSString string];
NSString *singlePinyinLetter=[[NSString stringWithFormat:@"%c",pinyinFirstLetter([tmpStr characterAtIndex:0])]uppercaseString];
pinYinResult=[pinYinResult stringByAppendingString:singlePinyinLetter];
// 找出所有的大写字母
firstLetters = [firstLetters stringByAppendingFormat:@"%@",pinYinResult];
}
transformedStr=firstLetters;
}else{
transformedStr=@"";
}
return transformedStr;
/*
//转成了可变字符串
NSMutableString *str = [NSMutableString stringWithString:zh];
//先转换为带声调的拼音
CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformMandarinLatin,NO);
//再转换为不带声调的拼音
CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformStripDiacritics,NO);
//转化为大写拼音
NSString *pinYin = [str capitalizedString];
NSMutableString *pinYinStr = [NSMutableString stringWithString:pinYin];
NSString *firstLetters=[[NSString alloc]init];
for (int i = 0; i<pinYinStr.length; i++) {
unichar characterOfStr = [pinYinStr characterAtIndex:i];
// 找出所有的大写字母
if(characterOfStr<= 'Z' && characterOfStr>='A') {
firstLetters = [firstLetters stringByAppendingFormat:@"%C",characterOfStr];
}
}
//获取并返回首字母
return firstLetters;
*/
}
4、在某些情况下,需要判断一个字符串是否包含中文:
+(BOOL)isChinese:(NSString *)str{
for(int i=0; i< [str length];i++){
int a = [str characterAtIndex:i];
if( a > 0x4e00 && a < 0x9fff){
return YES;
}
}
return NO;
}
http://download.csdn.net/detail/guobing19871024/9684070