Xamarin写Android程序时,通常要使用按中文首字母分组显示(如通讯录) 。
于是需要被迫包含CJK,不过包含后包肯定是会变大的,于是。。。。自己写了一个硬枚举的中文转拼音的类。
原理是这样的:
public class PinYinUtils { private static readonly Dictionary<string, string> PinYinDict = new Dictionary<string, string> { {"猿", "YUAN"} // 等............ }; /// <summary> /// Return to the first letter /// </summary> /// <param name="word">Chinese word</param> /// <example> /// GetFirstPinyinChar("张三") /// will return "Z" /// Can be used for address book index and so on /// </example> /// <returns></returns> public static string GetFirstPinyinChar(string word) { if (word.Length == 0) return "#"; var firstLetter = word[0].ToString(); if (PinYinDict.ContainsKey(firstLetter)) { return PinYinDict[firstLetter]; } return firstLetter; } /// <summary> /// return the chinese char's pinyin /// </summary> /// <param name="chineseChar"></param> /// <example> /// GetPinYin('福') /// will return "FU" /// </example> /// <returns></returns> public static string GetPinYin(char chineseChar) { var str = chineseChar.ToString(); if (PinYinDict.ContainsKey(str)) { return PinYinDict[str]; } return null; } /// <summary> /// Get the phonetic abbreviation for Chinese char /// </summary> /// <param name="chineseChar"></param> /// <example> /// GetShortPinYin('福') /// will return "F" /// </example> /// <returns></returns> public static string GetShortPinYin(char chineseChar) { var str = chineseChar.ToString(); if (PinYinDict.ContainsKey(str)) { var first = PinYinDict[str].FirstOrDefault(); if (first == 0) return null; return first.ToString(); } return null; } }
源码:
https://github.com/chsword/PinYinUtil/blob/master/PinYinUtils.cs
GITHUB:https://github.com/chsword/PinYinUtil
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持呐喊教程!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:notice#nhooo.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。