原文位址:http://blog.csdn.net/zeng_zhiming/article/details/68927728
在項目中顯示通訊錄往往需要把中文名字轉換為拼音來進行排序,為此我封裝了一個類,将中文轉為拼音分享給大家。
思路主要為:
1、使用[CFStringTransform]的[kCFStringTransformMandarinLatin]可以将中文轉為帶音調的拼音
2、使用[CFStringTransform]的[kCFStringTransformStripDiacritics]可以去掉音調符号
3、周遊字元串,将每個字元轉為拼音後可以隻取拼音首字母來進行使用
廢話不多說,直接上代碼:
//
// NSString+PinYin.m
// ZMPinYinDemo
//
// Created by ZengZhiming on 2017/3/31.
// Copyright © 2017年 菜鳥基地. All rights reserved.
//
#import "NSString+PinYin.h"
@implementation NSString (PinYin)
/**
将中文字元串轉換為拼音格式(帶聲調)
@return 傳回帶聲調拼音字元串
*/
- (NSString *)transformToPinyinTone
{
// 空值判斷
if (IsNullString(self)) {
return @"";
}
// 将字元串轉為NSMutableString類型
NSMutableString *string = [self mutableCopy];
// 将字元串轉換為拼音音調格式
CFStringTransform((__bridge CFMutableStringRef)string, NULL, kCFStringTransformMandarinLatin, NO);
// 傳回帶聲調拼音字元串
return string;
}
/**
将中文字元串轉換為拼音格式(不帶聲調)
@return 傳回不帶聲調拼音字元串
*/
- (NSString *)transformToPinyin
{
// 空值判斷
if (IsNullString(self)) {
return @"";
}
// 将字元串轉為NSMutableString類型
NSMutableString *string = [self mutableCopy];
// 将字元串轉換為拼音音調格式
CFStringTransform((__bridge CFMutableStringRef)string, NULL, kCFStringTransformMandarinLatin, NO);
// 去掉音調符号
CFStringTransform((__bridge CFMutableStringRef)string, NULL, kCFStringTransformStripDiacritics, NO);
// 傳回不帶聲調拼音字元串
return string;
}
/**
将中字元串轉換為拼音首字母
@return 拼音首字母字元串
*/
- (NSString *)transformToFirstLetter
{
// 空值判斷
if (IsNullString(self)) {
return @"";
}
// 首字母存儲
NSMutableString *firstLetterStirng = [NSMutableString string];
// 周遊字元串中的所有字元
for (NSUInteger i = 0; i < self.length; i++) {
// 将每個字元截取後進行拼音轉換
NSString *charStr = [self substringWithRange:NSMakeRange(i, 1)];
NSString *pinyin = [charStr transformToPinyin];
// 存儲轉換後的拼音首字母
[firstLetterStirng appendString:[pinyin substringToIndex:1]];
}
// 傳回中文首字母字元串
return [firstLetterStirng uppercaseString];
}
@end
使用也非常簡單:
/** 拼音轉換按鈕點選 */
- (IBAction)onPinYinAction:(UIButton *)sender {
// 顯示帶聲調的拼音
_pinyinToneLabel.text = [_textField.text transformToPinyinTone];
// 顯示不帶聲調的拼音
_pinyinLabel.text = [_textField.text transformToPinyin];
// 顯示拼音首字母
_firstLetterlLabel.text = [_textField.text transformToFirstLetter];
}
Demo請移步:https://github.com/zeng-zhiming/ZMPinYinDemo
如果大家有更好的拼音轉換方式,請在部落格留言,本人不勝感激。
原文位址:http://blog.csdn.net/zeng_zhiming/article/details/68927728