需要用swift实现,从一个汉字的拼音的第一个字母
比如:张三
提取出来的是:(姓的拼音zhang的第一个字母:z)
搜:
swift chinese char first letter
参考:
搜:
swift chinese characters pinyin
ios chinese characters pinyin
ios get pinyin of chinese characters
ios Chinese characters to english letters
ios Chinese characters letters
ios contact first letter
object-c chinese contact name to Alphabetical
object-c chinese contact to Alphabetical
object-c chinese Alphabetical
参考:
问题转化为:
如果将汉字字符串,转换为拼音
得到拼音后,即可获取首字母了。
参考:
参考:
kCFStringTransformStripCombiningMarksThe identifier of a transform to strip combining marks (accents or diacritics).kCFStringTransformStripDiacriticsThe identifier of a transform to remove diacritic markings.
用代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | //: Playground - noun: a place where people can play //Crifan: test translate zh-cn Chinese string into PinYin import UIKit var zhcnNameList = [ "张三" , "李四" , "王五" , "徐六" , "赵七" , "王八" ,] print(zhcnNameList) func translateChineseStringToPyinyin(chineseStr:String) -> String { print( "chineseStr=\(chineseStr)" ) //chineseStr=王八 var translatedPinyinStr:String = "" let zhcnStrToTranslate:CFMutableStringRef = NSMutableString(string: chineseStr) print( "zhcnStrToTranslate=\(zhcnStrToTranslate)" ) //zhcnStrToTranslate=王八 var translatedOk:Bool = CFStringTransform(zhcnStrToTranslate, nil, kCFStringTransformMandarinLatin, false ) print( "translatedOk=\(translatedOk)" ) //translatedOk=true print( "zhcnStrToTranslate=\(zhcnStrToTranslate)" ) //zhcnStrToTranslate=wáng bā if translatedOk { //continue to translated to pinyin without accents let translatedPinyinWithAccents = zhcnStrToTranslate translatedOk = CFStringTransform(translatedPinyinWithAccents, nil, kCFStringTransformStripCombiningMarks, false ) if translatedOk { translatedPinyinStr = translatedPinyinWithAccents as String } } print( "translatedPinyinStr=\(translatedPinyinStr)" ) //translatedPinyinStr=wang ba return translatedPinyinStr } for (idx, eachZhcnName) in zhcnNameList.enumerate() { print( "[\(idx)] \(eachZhcnName)" ) //[5] 王八 let translatedPinyinStr = translateChineseStringToPyinyin(zhcnNameList[idx]) print( "translatedPinyinStr=\(translatedPinyinStr)" ) } |
效果:

-》抽空倒是需要去搞清楚Xcode中如何调试查看代码执行时间呢
后续继续优化代码为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | //translate chinese string into pinyin with accents func translateChineseStrToPinyinWithAccents(chineseStr:String) -> String { print( "chineseStr=\(chineseStr)" ) //chineseStr=王八 var translatedPinyinWithAccents:String = "" let zhcnStrToTranslate:CFMutableStringRef = NSMutableString(string: chineseStr) print( "zhcnStrToTranslate=\(zhcnStrToTranslate)" ) //zhcnStrToTranslate=王八 let translatedOk:Bool = CFStringTransform(zhcnStrToTranslate, nil, kCFStringTransformMandarinLatin, false ) print( "translatedOk=\(translatedOk)" ) //translatedOk=true if translatedOk { translatedPinyinWithAccents = zhcnStrToTranslate as String print( "translatedPinyinWithAccents=\(translatedPinyinWithAccents)" ) } return translatedPinyinWithAccents } //remove accents from (Chinese PinYin) string func removeAccentsFromStr(strWithAccents:String) -> String { print( "strWithAccents=\(strWithAccents)" ) //áng shān sù jì var removedAccentsStr:String = "" let strWithAccentsRef:CFMutableStringRef = NSMutableString(string: strWithAccents) //method 1: kCFStringTransformStripCombiningMarks let translatedOk = CFStringTransform(strWithAccentsRef, nil, kCFStringTransformStripCombiningMarks, false ) // //method 2: kCFStringTransformStripDiacritics // let translatedOk = CFStringTransform(strWithAccentsRef, nil, kCFStringTransformStripDiacritics, false) print( "translatedOk=\(translatedOk)" ) //true if translatedOk { removedAccentsStr = strWithAccentsRef as String print( "removedAccentsStr=\(removedAccentsStr)" ) //ang shan su ji } return removedAccentsStr } //translate Chinese characters string to characterStr:pinyin(without accents) dictionary list //Note: here use dict list intead of dict to makesure returned key:value sequence can guaranteed func translateChineseStrToCharPinyinDict(chineseStr:String) -> [[String:String]] { //print("chineseStr=\(chineseStr)") //昂山素季 let noneSeperatorStr:String = "" let chinseSingleCharStrArr:[String] = splitSingleStrToStrArr(chineseStr, seperatorStr: noneSeperatorStr) //print("chinseSingleCharStrArr=\(chinseSingleCharStrArr)") //["昂", "山", "素", "季"] var translatedCharPinyinDictList:[[String:String]] = [[String:String]]() let translatedPinyinStrWithAccents:String = translateChineseStrToPinyinWithAccents(chineseStr) //print("translatedPinyinStrWithAccents=\(translatedPinyinStrWithAccents)") //áng shān sù jì let pinyinStrWithoutAccents:String = removeAccentsFromStr(translatedPinyinStrWithAccents) //print("pinyinStrWithoutAccents=\(pinyinStrWithoutAccents)") //ang shan su ji let spaceSeperatorStr:String = " " var pinyinStrArr:[String] = splitSingleStrToStrArr(pinyinStrWithoutAccents, seperatorStr: spaceSeperatorStr) //print("pinyinStrArr=\(pinyinStrArr)") //["ang", "shan", "su", "ji"] for (idx, curSingleChineseCharStr) in chinseSingleCharStrArr.enumerate() { let curPinyinStr:String = pinyinStrArr[idx] translatedCharPinyinDictList.append([curSingleChineseCharStr: curPinyinStr]) } //print("translatedCharPinyinDictList=\(translatedCharPinyinDictList)") //[["昂": "ang"], ["山": "shan"], ["素": "su"], ["季": "ji"]] return translatedCharPinyinDictList } |
使用举例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /* * translateChineseStrToPinyinWithAccents demo */ let chineseStr:String = "昂山素季" let translatedPinyinStrWithAccents:String = translateChineseStrToPinyinWithAccents(chineseStr) print( "translatedPinyinStrWithAccents=\(translatedPinyinStrWithAccents)" ) //"áng shān sù jì" /* * removeAccentsFromStr demo */ let pinyinWithAccents:String = "áng shān sù jì" let strippedAccentsPinyin:String = removeAccentsFromStr(pinyinWithAccents) print( "strippedAccentsPinyin=\(strippedAccentsPinyin)" ) //"ang shan su ji" /* * translateChineseStrToCharPinyinDict demo */ let chineseStrToTranslate:String = "昂山素季" let translatedCharPinyinDict = translateChineseStrToCharPinyinDict(chineseStrToTranslate) print( "translatedCharPinyinDict=\(translatedCharPinyinDict)" ) //[["昂": "ang"], ["山": "shan"], ["素": "su"], ["季": "ji"]] |
更多相关函数可参考:
转载请注明:在路上 » [已解决]swift 提取中文汉字的拼音的第一个字母