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();
}