需要用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.
用代码:
//: 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中如何调试查看代码执行时间呢
后续继续优化代码为:
//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 }
使用举例:
/* * 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 提取中文汉字的拼音的第一个字母