.net实现拼音检索

2012年2月24日   天气 阴雨绵绵

今天接触到一个新的技术(本来已有好几年的技术,但对于我来说是新),拼音检索

对于拼音检索这个问题,我们看到很多,比如百度,一些论坛

要实现拼音检索,首先要下一个“Microsoft Visual Studio International pack v1.0”中有一个开发包,里面有开发文档和dll文件,引入文件

开始编码:

       public static  void pinyin()
        {
            //建立一个chineseChar的实例
            ChineseChar cc = new ChineseChar('张');
            int c=cc.PinyinCount;
            Console.WriteLine(c);
            //这样调试出来有一个问题,拼音个数本来是1 个,但它显示有8个,其余的是空
            ReadOnlyCollection<string> s = cc.Pinyins;
            foreach (string str in s)
            {
                Console.WriteLine(str);
            }
            //建议用这种方法,cc.PinyinCount是找出拼音的个数
            for (int i = 0; i < cc.PinyinCount; i++)
            {
                Console.WriteLine(cc.Pinyins[i]);
            }
            //输入一个字符串,检索出他们的拼音,因为有可能是多音字,简单些 ,选取第一个,易错的  不能输入 字母,要输入 简体中文
            string str1=Console.ReadLine();
            foreach (char i in str1)
            {
                //判断是否是合法的简体中文
                if (ChineseChar.IsValidChar(i))
                {
                    ChineseChar cc1 = new ChineseChar(i);
                    Console.WriteLine(cc1.Pinyins[0]);
                }
                else
                    Console.WriteLine(i);
            }

            //找一个拼音的所有汉字,后面必须带声调,而且只能一个拼音一个拼音的找,不能输入 像“gu1ni4”,这样会出错
            char[] vvv=ChineseChar.GetChars("gu1");
            foreach (char v in vvv)
            {
                Console.WriteLine(v);
            }

一个实例,下面有详细解释

       //这个按钮是用来一键添加pinyins,要实现拼音检索,我们通常采用的办法是在数据库建立一个以姓名为拼音的字段
        //然后再按输入拼音检索姓名
        private void btnaddpinyin_Click(object sender, EventArgs e)
        {
            //这程序是按三层架构写的,下面这行代码是取出所有的T_Customers行的所有行
            IEnumerable<T_Customers> tc = new T_CustomersBLL().ListAll();
            //遍历每一行,给每个pinyin字段添加拼音
            foreach (T_Customers cus in tc)
            {
                cus.namepinyin = newpinyin(cus.Name);
                //更新一行
                new T_CustomersBLL().Update(cus);
            }
            MessageBox.Show("添加成功");
        }
        //给字符串生成拼音
        private string newpinyin(string str)
        {
            StringBuilder str1=new StringBuilder();
            //遍历每一个字符
            foreach (char c in str)
            {
                //判断是否为有效简体中文
                if (ChineseChar.IsValidChar(c))
                {
                    string pinyin;
                    ChineseChar ac = new ChineseChar(c);
                    //获取一个中文字符的拼音,有可能是多音字,后面是声调,把声调去除悼
                    for (int i = 0; i < ac.PinyinCount; i++)
                    {
                        pinyin = ac.Pinyins[i];
                        str1.Append(pinyin.Substring(0,pinyin.Length-1));
                    }
                }
                //如果不是,原样添加
                else
                    str1.Append(c);
            }
            return str1.ToString();
        }

转载于:https://www.cnblogs.com/arno-zhang/archive/2012/02/24/5027573.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值