C#中 利用汉字在计算机里面的编码来得到汉字的首拼音

利用汉字在计算机里面的编码来得到汉字的首拼音(适用于简体)

 

public static string GetSpell(string strText)
{
    string myStr = string.Empty;
    for (int i = 0; i < strText.Length; i++)
    {
        myStr += GetFirstSpell(strText.Substring(i, 1));
    }
    return myStr;
}

private static string GetFirstSpell(string cnChar)
{
    byte[] arrCN = Encoding.Default.GetBytes(cnChar);
    if (arrCN.Length > 1)
    {
        int area = (short)arrCN[0];
        int pos = (short)arrCN[1];
        int code = (area << 8) + pos;
        int[] areacode = { 45217, 45253, 45761, 46318, 46826, 47010, 47297, 47614, 48119, 48119, 49062, 49324, 49896, 50371, 50614, 50622, 50906, 51387, 51446, 52218, 52698, 52698, 52698, 52980, 53689, 54481 };
        for (int i = 0; i < 26; i++)
        {
            int max = 55290;
            if (i != 25)
                max = areacode[i + 1];
            if (areacode[i] <= code && code < max)
            {
                return Encoding.Default.GetString(new byte[] { (byte)(65 + i) });
            }
        }
        return "*";
    }
    else
    {
        return cnChar;
    }
}

 

在TextBox的TextChanged事件中添加以下类似检索代码:

private void textBox1_TextChanged(object sender, EventArgs e)
{
         //以下是拼音檢索
         string [] m_list;
          m_list = new string[] { "电脑部", "财务部", "生产部" };
         this.listBox1.Items.Clear();
         System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex("[^a-zA-Z/r/n]+");
         if (!reg.Match(textBox1.Text.ToString()).Success)
         {
            //遍历ArrayList中的所有道路信息
            foreach (object o in m_list)
            {
              //获得道路名称各汉字拼音首字母缩写
              string strRoadName = GetSpell(o.ToString()).ToLower();
              string strtxtRoadName = textBox1.Text.ToLower();
              //根据拼音进行匹配(利用Contain和Substring函数进行判定)
              if (strRoadName.Contains(strtxtRoadName) && strtxtRoadName.Substring(0, strtxtRoadName.Length) == strtxtRoadName)
              {
                  //listBox1.Items.Add(o1+"  "+o);
                  listBox1.Items.Add(o);
              }
           }
         }
         else
         {
              //当TextBox为空时显示所有数据
             //ShowRouteName();       
         }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值