我也是看了網上的一個示例代碼後,在它的基礎上進行的修改。因為項目上會用到,我相信很多人的項目上也會用到。所以實現後,也趕緊分享出來,希望後來人不需要花費時間了。 提示:這裡用到了正則表達式,使用了一個第三方開源的組件:RegexKitLite (該組件如何使用網上教程很多) #pragma mark ...
我也是看了網上的一個示例代碼後,在它的基礎上進行的修改。因為項目上會用到,我相信很多人的項目上也會用到。所以實現後,也趕緊分享出來,希望後來人不需要花費時間了。
提示:這裡用到了正則表達式,使用了一個第三方開源的組件: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;
}
希望大家能用得上!