文本框根据拼音自动匹配提示
来源:互联网 发布:百度联盟 域名推广 编辑:程序博客网 时间:2024/04/28 14:00
2012-11-12 21:30
之前有提到过用jquery来实现文本框的自动匹配(http://hi.baidu.com/yunanwu/item/2a5aa13b1607fa26b3c0c522 ) 发现只能用汉字的匹配,又觉得吧平时在用百度谷歌的时候,输入拼音的时候也可以直接提示,就琢磨着自己实现一下这个功能(发现自己现在看到网页的功能,都要联想着自己去写了)。
关于拼音的操作,微软提供了一个类库可以使用,感觉挺好用的。类库的名字叫做 Visual Studio International Pack
(百度网盘下载<无需安装,直接引用DLL > 官方下载)
官方下载之后需要找到一下DLL文件:
下载解压之后可以发现7个MSI安装文件,其中CHSPinYinConv.msi是汉字拼音组件,CHTCHSConv.msi是进行繁简体互转组件,安装这两个MSI就可以了 (x86操作系统上的默认安装目录是 C:\Program Files\Microsoft Visual Studio International Pack\) 。安装完毕后,需要在VS里添加引用,分别引用:C:\Program Files\Microsoft Visual Studio International Pack\Simplified Chinese Pin-Yin Conversion Library(拼音)下和C:\Program Files\Microsoft Visual Studio International Pack\Traditional Chinese to Simplified Chinese Conversion Library and Add-In Tool(繁简互转)下的dll 即可使用。
文本框自动匹配提示的功能之前写过了就不提了,说下拼音操作的代码吧,其实实现吧也有两种方法,一种就是直接在内存中转换拼音的,另外一种就是在数据库中添加一个字段用于存放拼音,个人感觉第二个效率应该会高点(没测试过)
先看一下结果:
首先这个函数是将字符串转换为拼音的代码
/// <summary> /// //获取字符串的汉语拼音 /// </summary> /// <param name="str">需要转换的字符串</param> /// <returns>拼音字符串</returns> public string GetPinYin(string str) { string pinyin = null; foreach (char c in str) { //判断是否可以构成中中文字符 if (ChineseChar.IsValidChar(c)) { //实例化一个汉字字符 ChineseChar cc = new ChineseChar(c); string s = cc.Pinyins[0].ToString(); //这边如果只截取首字母,就可以实现通过首字母来匹配。 //少截取一个是因为最后一个是表示拼音的第几声 s = s.Substring(0, s.Length - 1); pinyin += s; } else { pinyin += c; } } return pinyin; }
下面这个函数是没有数据库字段,直接在内存中转换的代码
//根据拼音搜索的方法。。此方法为不在数据库中保存拼音的方法。 public List<string> getAllTable(string key) { try { //连接数据库 SqlConnection conn = new SqlConnection(@"Data Source=.\sqlexpress;Initial Catalog=DB_Search;Integrated Security=True"); string sqlstr = "select Search,COUNT(*) from Search group by Search order by COUNT(*) desc "; conn.Open(); //提取数据库中的数据 SqlDataAdapter sda = new SqlDataAdapter(sqlstr, conn); DataSet ds = new DataSet(); sda.Fill(ds); //再读取得到的DataTable中添加一列用于存放拼音。 ds.Tables[0].Columns.Add("pinyin"); //遍历,对每个字符串进行拼音的转换 foreach (DataRow dr in ds.Tables[0].Rows) { string pinyin = GetPinYin(dr["Search"].ToString()); dr["pinyin"] = pinyin; } //获取搜索的关键字拼音(如果为拼音则不变) key = GetPinYin(key); List<string> result = new List<string>(); DataRow[] drs= ds.Tables[0].Select("pinyin like '" + key + "%'"); foreach (DataRow dr in drs) { result.Add(dr["Search"].ToString()); } return result; } catch (Exception ex) { // logger.Error("AJAX请求失败....", ex); return null; } finally { //这边记得释放资源 } }
但是对上面的代码,应该都会觉得很浪费内存,因为每次的AJAX请求都需要转换拼音。
所以在数据库中添加一个字段(SearchPinyin)
//根据拼音搜索的方法。。此方法为在数据库中有保存拼音的字段。 public List<string> getAllTableByDb(string key) { try { //获取搜索的关键字拼音(如果为拼音则不变) key = GetPinYin(key); List<string> list = new List<string>(); SqlConnection conn = new SqlConnection(@"Data Source=.\sqlexpress;Initial Catalog=DB_Search;Integrated Security=True"); string sqlstr = "select Search,COUNT(*) from Search where SearchPinyin like '" + key + "%' group by SearchPinyin,Search order by COUNT(*) desc "; conn.Open(); SqlCommand cmd = new SqlCommand(sqlstr, conn); SqlDataReader sdr = cmd.ExecuteReader(); while (sdr.Read()) { list.Add(sdr["Search"].ToString()); } sdr.Close(); conn.Close(); return list; } catch (Exception ex) { // logger.Error("AJAX请求失败....", ex); return null; }finally { //这边记得释放资源 } }
下面是调用的代码
public void ProcessRequest(HttpContext context) { string key = context.Request["keyword"]; context.Response.ContentType = "text/plain"; List<string> list =null; if (key != "") { // list = getAllTable(key); list = getAllTableByDb(key); } else { list = new List<string>(); } JavaScriptSerializer jss = new JavaScriptSerializer(); string strRes = jss.Serialize(list); context.Response.Write(strRes); }
有兴趣还可以用这个开发包开发一个输入法。。
源文件下载地址:http://pan.baidu.com/share/link?shareid=104250&uk=839021066
下面这个是数据库的简要设计
- 文本框根据拼音自动匹配提示
- jQuery插件,自动提示,文本框自动匹配
- 文本框自动匹配提示功能(JQuery-AJAX)
- 自动提示的文本框
- 自动提示的文本框
- 文本框自动提示功能
- 自动提示文本框应用
- android 自动提示文本框
- 根据汉字,自动生成拼音
- EXCEL-单元格输入提示,自动补全,简码输入,首字母拼音及汉子模糊匹配
- 自动匹配文本框--AutCompleteTextView概述,
- 自动完成文本框(AutoCompleteTextView)提示文本框
- 自动提示文本框实例二
- 去掉文本框的自动提示
- 去掉文本框的自动提示
- 简单JS自动提示文本框
- Android自动提示文本框(AutoCompleteTextView)
- WinForm文本框设置自动提示
- 【木头Cocos2d-x 013】游戏实例-《跑跑跑》制作教程(第五篇)——主角上下移动
- 详谈CSS网页布局中容易发生的错误编码http://www.52css.com/article.asp?id=1190
- 为Eclipse创建Ant的build.xml文件编辑自动提示
- 只用一次+ 求三个整数之和
- Rational Rose 2003破解版安装
- 文本框根据拼音自动匹配提示
- JAVA多线程编程
- java 用jdbc:odbc和 jdbc驱动调用 sqlserver2000 数据库
- 八皇后问题(递归、非递归——回溯)
- 查看win7串口
- c#中找不到特定命名空间的问题
- VMware虚拟机网络连接配置
- 通过java实现代码规模统计并把结果导出至execl中
- 学习笔记:安装流媒体服务器Catra Streaming Platform For Windows