首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C# 透过拼音检索中文名称

2013-03-06 
C# 通过拼音检索中文名称using Systemusing System.Collections.Genericusing System.ComponentModelus

C# 通过拼音检索中文名称

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Collections;namespace TextEdit{    public partial class Form1 : Form    {        public ArrayList list = new ArrayList();        public Form1()        {            InitializeComponent();            addList();//添加集合中文        }        private void tBox_TextChanged(object sender, EventArgs e)        {            this.lstBox.Items.Clear();            System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex("[^a-zA-Z\r\n]+");            if (!reg.Match(tBox.Text).Success)            {                //遍历ArrayList中的所有信息                 foreach (object obj in list)                {                    //获得各汉字拼音首字母缩写                     string strName = GetChineseSpell(obj.ToString()).ToLower();                    string strTxtName = tBox.Text.ToLower();                    //根据拼音进行匹配                    if (strName.Contains(strTxtName) && strName.Substring(0, strTxtName.Length) == strTxtName)                    {                        lstBox.Items.Add(obj);                    }                }                return;            }            //检索信息为空,就显示所有信息            lstBox.DataSource = list;        }        /// <summary>              /// 拼音检索           /// </summary>            /// <param name="strText"></param>            /// <returns></returns>                static public string GetChineseSpell(string strText)        {            int len = strText.Length;            StringBuilder strBuilder = new StringBuilder();            for (int i = 0; i < len; i++)                strBuilder.Append(getLetters(strText.Substring(i, 1)));            return strBuilder.ToString();        }        /// <summary>        /// 得到首字母        /// </summary>        /// <param name="strChar"></param>        /// <returns></returns>         public static string getLetters(string strChar)        {            byte[] byteLetters = Encoding.Default.GetBytes(strChar);            if (byteLetters.Length > 1)            {                int first = (short)byteLetters[0];                int second = (short)byteLetters[1];                int code = (first << 8) + second;                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 string.Empty;            }            else                return strChar;        }        public void addList()        {            list.Add("奇元");            list.Add("玉环");            list.Add("曹操");            list.Add("曹丕");            list.Add("常在");            list.Add("常义");             list.Add("张三四");         }    }}

C#通过拼音检索中文文字,只需定义两个函数即可实现。

热点排行