C#实现汉字转汉语拼音的示例代码

目录
  • 一、使用PinYinConverterCore获取汉语拼音
  • 二、编写工具扩展类实现获取汉字的拼音
  • 三、编写测试用例

一、使用PinYinConverterCore获取汉语拼音

最新在做一个搜索组件,需要使用汉语拼音的首字母查询出符合条件的物品名称,由于汉字存在多音字,所以自己写查询组件不太现实,因此,我们使用微软提供的CHSPinYinConvCHSPinYinConv在.net core下载安装没有问题,但在.net framework会由于兼容性会安装失败,因此使用了PinYinConverterCore来实现汉字转拼音,PinYinConverterCore应该也是基于CHSPinYinConv开发的兼容包,后续的代码两个安装包环境下都可以使用。使用Nuget搜索PinYinConverterCore下载并安装,具体如下:

二、编写工具扩展类实现获取汉字的拼音

由于汉字存在多音字,因此,通过汉字获取到的拼音是一个数组,具体如下:

 /// <summary>
    /// 汉字转换拼音
    /// </summary>
    public static class PingYinUtil
    {
        private static Dictionary<int, List<string>> GetTotalPingYinDictionary(string text)
        {
            var chs = text.ToCharArray();

            //记录每个汉字的全拼
            Dictionary<int, List<string>> totalPingYinList = new Dictionary<int, List<string>>();

            for (int i = 0; i < chs.Length; i++)
            {
                var pinyinList = new List<string>();

                //是否是有效的汉字
                if (ChineseChar.IsValidChar(chs[i]))
                {
                    ChineseChar cc = new ChineseChar(chs[i]);
                    pinyinList = cc.Pinyins.Where(p => !string.IsNullOrWhiteSpace(p)).ToList();
                }
                else
                {
                    pinyinList.Add(chs[i].ToString());
                }

                //去除声调,转小写
                pinyinList = pinyinList.ConvertAll(p => Regex.Replace(p, @"\d", "").ToLower());

                //去重
                pinyinList = pinyinList.Where(p => !string.IsNullOrWhiteSpace(p)).Distinct().ToList();
                if (pinyinList.Any())
                {
                    totalPingYinList[i] = pinyinList;
                }
            }

            return totalPingYinList;
        }
        /// <summary>
        /// 获取汉语拼音全拼
        /// </summary>
        /// <param name="text">The string.</param>
        /// <returns></returns>
        public static List<string> GetTotalPingYin(this string text)
        {
            var result = new List<string>();
            foreach (var pys in GetTotalPingYinDictionary(text))
            {
                var items = pys.Value;
                if (result.Count <= 0)
                {
                    result = items;
                }
                else
                {
                    //全拼循环匹配
                    var newTotalPingYinList = new List<string>();
                    foreach (var totalPingYin in result)
                    {
                        newTotalPingYinList.AddRange(items.Select(item => totalPingYin + item));
                    }
                    newTotalPingYinList = newTotalPingYinList.Distinct().ToList();
                    result = newTotalPingYinList;
                }
            }
            return result;
        }

        /// <summary>
        /// 获取汉语拼音首字母
        /// </summary>
        /// <param name="text"></param>
        /// <returns></returns>
        public static List<string> GetFirstPingYin(this string text)
        {
            var result = new List<string>();
            foreach (var pys in GetTotalPingYinDictionary(text))
            {
                var items = pys.Value;
                if (result.Count <= 0)
                {
                    result = items.ConvertAll(p => p.Substring(0, 1)).Distinct().ToList();
                }
                else
                {
                    //首字母循环匹配
                    var newFirstPingYinList = new List<string>();
                    foreach (var firstPingYin in result)
                    {
                        newFirstPingYinList.AddRange(items.Select(item => firstPingYin + item.Substring(0, 1)));
                    }
                    newFirstPingYinList = newFirstPingYinList.Distinct().ToList();
                    result = newFirstPingYinList;
                }
            }
            return result;
        }
    }

三、编写测试用例

我们编写一个测试用例,通过输入的汉字获取到汉语拼音的全拼和首字母缩写,具体如下:

// 汉字输入
string text = TextBoxInput.Text;

// 获取到汉语拼音的全拼
TextBoxTotal.Text = string.Join(",", text.GetTotalPingYin());

// 获取到汉语拼音的首字母
TextBoxFirst.Text = string.Join(",", text.GetFirstPingYin());

我们编写录入一组用户名,然后根据输入输入的用户名的缩写,筛选出符合条件的人,我们可以使用Linq模糊查询,具体如下:

public class Student
    {
        public string Name { get; set; }
        public List<string> Pinyin { get; set; }
    }
 StudentList = new List<Student>
            {
                new Student() {Name = "张三"},
                new Student() {Name = "章黎"},
                new Student() {Name = "张三丰"},
                new Student() {Name = "李四"},
                new Student() {Name = "王五"},
                new Student() {Name = "John"},
                new Student() {Name = "W.吴"},
                new Student() {Name = "阿姨"},
                new Student() {Name = "阿胶"},
                new Student() {Name = "麦合苏提.麦合苏提"}
            };
var text = TextBoxSearch.Text;
            foreach (var student in StudentList)
            {
                student.Pinyin = student.Name.GetFirstPingYin();
            }

            StudentList = StudentList.Where(s => s.Pinyin.Exists(p=>p.Contains(text))).ToList();

到此这篇关于C#实现汉字转汉语拼音的示例代码的文章就介绍到这了,更多相关C#汉字转拼音内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C# 汉字转拼音(全拼和首字母)实例

    (一)将汉字转化成全拼代码: 复制代码 代码如下: private void button1_Click(object sender, EventArgs e)    {        this.textBox2.Text = Hz2Py.Convert(this.textBox1.Text);    } 汉字转拼音类: 复制代码 代码如下: /// <summary>    /// 汉字转拼音类    /// </summary>    public class Hz2Py   

  • C# 获取汉字的拼音首字母

    获取汉字拼音的首字母是一个在做项目的过程中经常需要用到的功能,今天我们主要来探讨下C# 获取汉字的拼音首字母 /// <summary> /// 在指定的字符串列表CnStr中检索符合拼音索引字符串 /// </summary> /// <param name="CnStr">汉字字符串</param> /// <returns>相对应的汉语拼音首字母串</returns> public static string

  • C#获取汉字字符串拼音首字母的方法

    本文实例讲述了C#获取汉字字符串拼音首字母的方法.分享给大家供大家参考.具体如下: 这个C#类经常能够用到,将提取汉字的拼音首字母,方便用户查询 using System.Text; namespace DotNet.Utilities { public class PinYin { public string GetFirstLetter(string hz) { string ls_second_eng = "CJWGNSPGCGNESYPBTYYZDXYKYGTDJNNJQMBSGZSCY

  • C# 汉字转化拼音的简单实例代码

    首先引入ChnCharInfo.dll 第3方的一个库 代码: btn_chinChar_Click事件: 复制代码 代码如下: private void btn_chinChar_Click(object sender, EventArgs e)        {            ChineseChar cr =null;            string str = "", txtString = txt_string.Text.Trim();            if

  • C# 汉字与拼音互转的实现示例

    这个功能,大家也都可以去百度以下,千篇一律都自己写的(抄的)封装好的公共类,此处还是得膜拜下原创的大佬,可以花时间去搞这个,我看着都头皮发麻. 对于一个有代码洁癖的码农来说,我并不喜欢那种方式(自己抄下来封装?那我图个啥?),所以我们直接从NuGet去获取一个封装好的DLL:NPinyin 此DLL提供了三个方法(重载不算) 汉字转拼音拼音转汉字(单字)获取汉字的拼音首字母 实现功能: 输入汉字获取拼音或者拼音的首字母,输入拼音获取对应的汉字 开发环境: 开发工具: Visual Studio

  • C#汉字转拼音实例(支持多音字)

    之前由于项目需要,中间需要一个汉字转拼音和首拼的功能来做查询,感觉这种功能基本已经成熟化了,于是查找了相关的代码,首先引入眼帘的是下面两篇文章 1.C# 汉字转拼音(支持GB2312字符集中所有汉字) 2.Javascript实现汉字和拼音互转的终极方案 写的比较全也很详细,都有提供源码,大家可以参考下. 由于考虑到接口的需要,于是参考了 第一篇,文章中作者的源码基本能满足汉字转拼音的需要,对于其他特殊的字符,也可以在进行添加补充,不足之处就是不支持多音字,由于需要支持多音字的查询,所以后面有查

  • C#实现汉字转换为拼音缩写的代码

    本文实例为大家分享了C#汉字转换为拼音缩写的实现代码,供大家参考,具体内容如下 using System; using System.Configuration; using System.Data; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web

  • C#实现汉字转拼音或转拼音首字母的方法

    本文实例讲述了C#实现汉字转拼音或转拼音首字母的方法.分享给大家供大家参考.具体实现方法如下: /// <summary> /// 汉字转拼音或转拼音首字母 /// </summary> public class ChineseToSpell { private static int[] pyValue = new int[] { -20319,-20317,-20304,-20295,-20292,-20283,-20265,-20257,-20242,-20230,-20051

  • C#实现汉字转汉语拼音的示例代码

    目录 一.使用PinYinConverterCore获取汉语拼音 二.编写工具扩展类实现获取汉字的拼音 三.编写测试用例 一.使用PinYinConverterCore获取汉语拼音 最新在做一个搜索组件,需要使用汉语拼音的首字母查询出符合条件的物品名称,由于汉字存在多音字,所以自己写查询组件不太现实,因此,我们使用微软提供的CHSPinYinConv,CHSPinYinConv在.net core下载安装没有问题,但在.net framework会由于兼容性会安装失败,因此使用了PinYinCo

  • 汉字转拼音缩写示例代码(Silverlight和.NET 将汉字转换成为拼音)

    复制代码 代码如下: /// <summary> /// 汉字转拼音缩写 /// </summary> /// <param name="str">要转换的汉字字符串</param> /// <returns>拼音缩写</returns> public string GetPYString(string str) { string tempStr = ""; foreach(char c in

  • java中实现汉字按照拼音排序(示例代码)

    最近項目中需要對繁體字按拼音進行排序 复制代码 代码如下: public static void main(String[] args) { Comparator cmp = Collator.getInstance(java.util.Locale.CHINA); String[] arr = { "张三", "李四", "王五", "刘六" ,"周濤","戴笠","戴阿&q

  • Java servlet 使用 PrintWriter 时的编码与乱码的示例代码

    在前面的网页中的编码与乱码系列中,曾多次提到使用 servlet 方式构建的动态响应流,不过在那里都是直接使用字节流的方式,不过,更为常见的方式是使用字符流.而在前面,又谈到了 Java 字节流与字符流的话题. 有了前面的基础,现在来说下 Java servlet 中使用字符流,也即是 PrintWriter 时的编码与乱码问题. 回顾字节流的情形 先回顾一下,在之前的字节流响应中,我们使用 String.getBytes 方法,然后总是显式传入编码的参数,使它与 meta 中或者 header

  • Python中字符串与编码示例代码

    在最新的Python 3版本中,字符串是以Unicode编码的,即Python的字符串支持多语言 编码和解码 字符串在内存中以Unicode表示,在操作字符串时,经常需要str和bytes互相转换   如果在网络上传输或保存到磁盘上,则从内存读到的数据就是str,要把str变为以字节为单位的bytes,称为编码   如果从网络或磁盘上读取字节流,则从网络或磁盘上读到的数据就是bytes,要把bytes变为str,称为解码   为避免乱码问题,应当始终坚持使用UTF-8编码对str和bytes进行

  • Java实现动态获取图片验证码的示例代码

    本文介绍了Java实现动态获取图片验证码的示例代码,分享给大家,具体如下: import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.io.UnsupportedEncodingEx

  • Go语言中strings和strconv包示例代码详解

    前缀和后缀 HasPrefix判断字符串s是否以prefix开头: strings.HaxPrefix(s string, prefix string) bool 示例: package main import ( "fmt" "strings" ) func main() { pre := "Thi" str1 := "This is a Go program!" fmt.Println(strings.HasPrefix(

  • Python操作Excel工作簿的示例代码(\*.xlsx)

    前言 Excel 作为流行的个人计算机数据处理软件,混迹于各个领域,在程序员这里也是常常被处理的对象,可以处理 Excel 格式文件的 Python 库还是挺多的,比如 xlrd.xlwt.xlutils.openpyxl.xlwings 等等,但是每个库处理 Excel 的方式不同,有些库在处理时还会有一些局限性. 接下来对比一下几个库的不同,然后主要记录一下 xlwings 这个库的使用,目前这是个人感觉使用起来比较方便的一个库了,其他的几个库在使用过程中总是有这样或那样的问题,不过在特定情

  • C#实现微信公众号会员卡管理的示例代码

    为了更好地理解微信公众号--会员卡管理,作者特意花了不少的时间对其研究,并用c#开发出会员卡demo,主要包含会员卡创建.设置开卡字段.通过创建二维码来投放会员卡.同步会员卡数据/激活会员卡.拉取会员信息.更新会员信息.设置会员卡失效.删除会员卡,从这些可以清晰地看出是围绕会员卡的生命周期来研究的.结合文章中DEMO有助于大家快速理解会员卡接口. 1.会员卡创建 1).会员卡创建接口文档   支持开发者调用该接口创建会员卡,并获取card_id,用于投放.调用该接口前,请开发者详读创建卡券接口部

  • mysql 行列转换的示例代码

    一.需求 我们有三张表,我们需要分类统计一段时间内抗生素的不同药敏结果,即 report_item_drugs 表的 drugs_result, 在不同项目project_name 和不同抗生素 antibiotic_dict_name 下的占比,并将药敏结果显示在行上,效果如下: 三张原始表(仅取需要的字段示例),分别是: 报告表 项目表 抗生素表(药敏结果drugs_result为一列值) 二.实现 1.按照项目.抗生素分组求出检出的总数 SELECT A.project_name,A.an

随机推荐