C#汉字转首字母拼音

      public partial class StringHelper
        {
            #region " LetterItem "  
            private class LetterItem
            {
                private String fLetter;
                private Int64 fMinValue;
                private Int64 fMaxValue;
                public String Letter { get { return fLetter; } }
                public Int64 MinValue { get { return fMinValue; } }
                public Int64 MaxValue { get { return fMaxValue; } }
                public LetterItem(String fLetter, Int64 fMinValue, Int64 fMaxValue)
                {
                    this.fLetter = fLetter;
                    this.fMinValue = fMinValue;
                    this.fMaxValue = fMaxValue;
                }
            }
            #endregion
            private static List<LetterItem> dictionaryLetter;
            #region " Constructor "  
            static StringHelper()
            {
                dictionaryLetter = new List<LetterItem>();
                // 没有 U、V   
                dictionaryLetter.Add(new LetterItem("A", 45217, 45252));
                dictionaryLetter.Add(new LetterItem("B", 45253, 45760));
                dictionaryLetter.Add(new LetterItem("C", 45761, 46317));
                dictionaryLetter.Add(new LetterItem("D", 46318, 46825));
                dictionaryLetter.Add(new LetterItem("E", 46826, 47009));
                dictionaryLetter.Add(new LetterItem("F", 47010, 47296));
                dictionaryLetter.Add(new LetterItem("G", 47297, 47613));
                dictionaryLetter.Add(new LetterItem("H", 47614, 48118));
                dictionaryLetter.Add(new LetterItem("J", 48119, 49061));
                dictionaryLetter.Add(new LetterItem("K", 49062, 49323));
                dictionaryLetter.Add(new LetterItem("L", 49324, 49895));
                dictionaryLetter.Add(new LetterItem("M", 49896, 50370));
                dictionaryLetter.Add(new LetterItem("N", 50371, 50613));
                dictionaryLetter.Add(new LetterItem("O", 50614, 50621));
                dictionaryLetter.Add(new LetterItem("P", 50622, 50905));
                dictionaryLetter.Add(new LetterItem("Q", 50906, 51386));
                dictionaryLetter.Add(new LetterItem("R", 51387, 51445));
                dictionaryLetter.Add(new LetterItem("S", 51446, 52217));
                dictionaryLetter.Add(new LetterItem("T", 52218, 52697));
                dictionaryLetter.Add(new LetterItem("W", 52698, 52979));
                dictionaryLetter.Add(new LetterItem("X", 52980, 53640));
                dictionaryLetter.Add(new LetterItem("Y", 53689, 54480));
                dictionaryLetter.Add(new LetterItem("Z", 54481, 55289));
            }
            #endregion
            /// <summary>  
            /// 获取一段中文中每个中文拼音的第一个字母  
            /// </summary>  
            /// <param name="fInputChinese">需要获取字母的中文</param>  
            /// <returns>中文拼音的第一个字母</returns>  
            public static string GetFirstLetterOfChinese(string fInputChinese)
            {
                return GetFirstLetterOfChinese(fInputChinese, false);
            }
            /// <summary>  
            /// 获取一段中文中每个中文拼音的第一个字母  
            /// </summary>  
            /// <param name="fInputChinese">需要获取字母的中文</param>  
            /// <param name="fReutrnEmptyWhenFailure">当输入不是中文时是否返回空值。True:返回空值;False:返回传入参数的大写</param>  
            /// <returns>中文拼音的第一个字母</returns>  
            public static string GetFirstLetterOfChinese(string fInputChinese, Boolean fReutrnEmptyWhenFailure)
            {
                string letters = "";

                foreach (char c in fInputChinese.ToCharArray())
                    letters += GetFirstLetterOfPinyin(c.ToString(), fReutrnEmptyWhenFailure);
                return letters;
            }
            /// <summary>  
            /// 获取一个中文拼音的第一个字母。  
            /// </summary>  
            /// <param name="fInputSingleChinese">需要获取字母的一个中文</param>  
            /// <param name="fReutrnEmptyWhenFailure">当输入不是中文时是否返回空值。True:返回空值;False:返回传入参数的大写</param>  
            /// <returns>中文拼音的第一个字母</returns>  
            private static string GetFirstLetterOfPinyin(String fInputSingleChinese, Boolean fReutrnEmptyWhenFailure)
            {
                byte[] byteArray = System.Text.Encoding.Default.GetBytes(fInputSingleChinese);
                //如果是字母,则直接返回   
                if (byteArray.Length == 1)
                {
                    return fReutrnEmptyWhenFailure
                        ? fInputSingleChinese.ToUpper()
                        : String.Empty;
                }
                // 获取范围  
                short minValue = (short)(byteArray[0]);
                short maxValue = (short)(byteArray[1]);
                Int64 value = minValue * 256 + maxValue;
                foreach (LetterItem letterItem in dictionaryLetter)
                {
                    if (value >= letterItem.MinValue &&
                        value <= letterItem.MaxValue)
                        return letterItem.Letter;
                }
                return "?"; // 未知  
            }
        }

  

posted @ 2020-01-19 09:47  徐鲜  阅读(733)  评论(0编辑  收藏  举报