我也是看了网上的一个示例代码后,在它的基础上进行的修改。因为项目上会用到,我相信很多人的项目上也会用到。所以实现后,也赶紧分享出来,希望后来人不需要花费时间了。
提示:这里用到了正则表达式,使用了一个第三方开源的组件:RegexKitLite (该组件如何使用网上教程很多)
#pragma mark - 获取拼音首字母(传入汉字字符串, 返回小写拼音首字母)
+(NSString *)pinYingFirstCharactorStr:(NSString *)aString
{
//转成了可变字符串
NSMutableString *str = [NSMutableString stringWithString:aString];
//先转换为带声调的拼音
CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformMandarinLatin,NO);
//再转换为不带声调的拼音
CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformStripDiacritics,NO);
//转化为小写拼音
NSString *pinYin = [str lowercaseString];
NSString *regexString = @"\\s"; //使用的拆分间隔的正则符号是空格
NSArray* aArray=[pinYin componentsSeparatedByRegex:regexString]; //进行拆分
//遍历字符串数组,拼接首字母
NSString* strReturn;
NSString* strProc = @"";
for (int i=0; i<aArray.count; i++) {
//针对子串可能有数字进一步处理
NSString* strTmp=[CRGOtherHelper firstReplaceInNumberStr:aArray[i]];
strReturn=[strProc stringByAppendingString:strTmp];
strProc=strReturn;
}
//获取并返回首字母
return strReturn;
}
//对传入的字符串进行按数字间隔拆分到一个新的子数组中,对子数组中的非空成员取首字母得到一个临时字符。
//然后用这个临时字符去替换原有的数组成员中的字符串的对应部分(查找方式是比对先前拆分的成员)
+(NSString*)firstReplaceInNumberStr:(NSString*)waitProcStr
{
NSString* strResult=nil;
NSString* strWait=[[waitProcStr copy] autorelease];
//找字符串
NSString *regexString=@"[0-9]";
//进一步拆分成子串数组
NSArray* strArray=[waitProcStr componentsSeparatedByRegex:regexString]; //进行拆分
NSArray* strCopy=[strArray copy];
for (int j=0; j<strArray.count; j++) {
if (![(NSString*)strArray[j] isEqualToString:@""])
{
//取首字母
NSString* fistChar=[strArray[j] substringToIndex:1];
//部分替换
strResult=[strWait stringByReplacingOccurrencesOfRegex:strCopy[j] withString:fistChar];
strWait=strResult;
}
}
return strResult;
}
希望大家能用得上!