1. 程式人生 > >ios開發 之 中文轉拼音

ios開發 之 中文轉拼音

在專案中顯示通訊錄往往需要把中文名字轉換為拼音來進行排序,為此我封裝了一個類,將中文轉為拼音分享給大家。

思路主要為:

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];
    
}


如果大家有更好的拼音轉換方式,請在部落格留言,本人不勝感激。