.Net常用技巧_汉字转拼音类(除汉字外,其余的原样输出)

注:如果是多音字,则默认取第一个拼音。

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.International.Converters.PinYinConverter;

namespace MyTool
{
    /// <summary>
    /// 汉字转拼音类
    /// </summary>
    public class PinYinConver
    {
        public PinYinConver()
        {
            //
            // TODO: 在此处添加构造函数逻辑
            //
        }

        #region   自定义方法

        /// <summary>
        /// 将字符串转换成首个拼音
        /// </summary>
        /// <param name="chineseStr">字符串</param>
        /// <returns></returns>
        private static string ConvertToFirstPinYin(string chineseStr)
        {
            if (chineseStr == null)
                return "";

            char[] charArray = chineseStr.ToCharArray();
            StringBuilder sb = new StringBuilder();
            foreach (char c in charArray)
            {
                ChineseChar chineseChar = new ChineseChar(c);
                System.Collections.ObjectModel.ReadOnlyCollection<string> pyColl = chineseChar.Pinyins;
                foreach (string py in pyColl)
                {
                    if (py != null)
                    {
                        sb.Append(py.Substring(0, 1));
                        break;
                    }
                }
            }
            return sb.ToString();
        }

        /// <summary>
        /// 将字符串转换成拼音(如遇多音字取第一个读音)
        /// </summary>
        /// <param name="chineseStr">汉字字符串</param>
        /// <returns></returns>
        private static string ConvertToPinYin(string chineseStr)
        {
            if (chineseStr == null)
                throw new ArgumentNullException("chineseStr");

            char[] charArray = chineseStr.ToCharArray();
            StringBuilder sb = new StringBuilder();
            List<string> listPinyin = new List<string>();
            foreach (char c in charArray)
            {
                ChineseChar chineseChar = new ChineseChar(c);
                System.Collections.ObjectModel.ReadOnlyCollection<string> pyColl = chineseChar.Pinyins;

                if (pyColl[0] == null)
                    continue;
                string strPinyin = pyColl[0].Substring(0, pyColl[0].Length - 1);
                if (!listPinyin.Contains(strPinyin))
                    sb.Append(strPinyin);
                listPinyin.Add(strPinyin);
            }
            return sb.ToString();
        }

        public static bool IsValidChar(char ch)
        {
            return ChineseChar.IsValidChar(ch);
        }
        /// <summary>
        /// 是否为有效的中文字
        /// </summary>
        /// <param name="chn"></param>
        /// <returns></returns>
        public static bool IsValidChinese(string chn)
        {
            if (chn == null)
                return false;

            foreach (char c in chn)
            {
                if (!IsValidChar(c))
                    return false;
            }
            return true;
        }

        #endregion

        /// <summary>
        /// 生成助记码
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public static string CreateNnemonicCode(string strName)
        {
            string strPin = strName;
            if (string.IsNullOrEmpty(strName) == false)
            {
                string text = strName;
                char[] c = text.ToCharArray();
                string strSum = "";
                for (int i = 0; i < c.Length; i++)
                {
                    //是否是汉字
                    if (c[i] >= 0x4e00 && c[i] <= 0x9fbb)
                    {
                        string strTemp = "";
                        strTemp = c[i].ToString();
                        strTemp = MyTool.PinYinConver.ConvertToFirstPinYin(strTemp);
                        strSum += strTemp.ToUpper();
                    }
                    else if (Char.IsUpper(c[i]) || Char.IsLower(c[i]))
                    {
                        //如果是大小写字母
                        strSum += c[i].ToString().ToUpper();
                    }
                    else if (!Char.IsUpper(c[i]) && !Char.IsLower(c[i]) && !((c[i] >= 0x4e00 && c[i] <= 0x9fbb)))
                    {
                        //其它的原样
                        strSum += c[i].ToString();
                    }
                }

                strPin = strSum;
                //strPin = strSum.ToUpper();
            }
            else
            {
                strPin = "";
            }

            return strPin;
        }

        /// <summary>
        /// 生成拼音编码
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public static string CreateSpellCode(string strName)
        {
            string strPin = strName;
            if (string.IsNullOrEmpty(strName) == false)
            {
                string text = strName;
                char[] c = text.ToCharArray();
                string strSum = "";
                for (int i = 0; i < c.Length; i++)
                {
                    //是否是汉字
                    if (c[i] >= 0x4e00 && c[i] <= 0x9fbb)
                    {
                        string strTemp = "";
                        strTemp = c[i].ToString();
                        strTemp = MyTool.PinYinConver.ConvertToPinYin(strTemp);
                        strSum += strTemp.ToLower();
                    }
                    else if (Char.IsUpper(c[i]) || Char.IsLower(c[i]))
                    {
                        //如果是大小写字母
                        strSum += c[i].ToString().ToLower();
                    }
                    else if (!Char.IsUpper(c[i]) && !Char.IsLower(c[i]) && !((c[i] >= 0x4e00 && c[i] <= 0x9fbb)))
                    {
                        //其它的原样
                        strSum += c[i].ToString();
                    }
                }

                strPin = strSum;
                //strPin = strSum.ToLower();
            }
            else
            {
                strPin = "";
            }

            return strPin;
        }

    }
}

调用时示例:
注:调用时最好写在KeyUp事件中

private void txtMaterialName_KeyUp(object sender, KeyEventArgs e)
        {

//传入待处理的字符串或文本框内容,生成助记码
            this.txtNnemonicCode.Text = MyTool.PinYinConver.CreateNnemonicCode(this.txtMaterialName.Text);

    //传入待处理的字符串或文本框内容,生成拼音编码
            this.txtSpellCode.Text = MyTool.PinYinConver.CreateSpellCode(this.txtMaterialName.Text);
        }

.Net常用技巧_汉字转拼音类(除汉字外,其余的原样输出),布布扣,bubuko.com

时间: 2024-08-05 15:25:49

.Net常用技巧_汉字转拼音类(除汉字外,其余的原样输出)的相关文章

.Net常用技巧_树控件工具类

using System; using System.Collections.Generic; using System.Text; using System.Collections; using DevComponents.AdvTree; namespace MyUtility { /// <summary> /// 树控件工具类 /// </summary> public class TreeTool { ArrayList selectArray = new ArrayLi

.Net常用技巧_操作Excel知识点

C#操作Excel知识点 近期在使用C#操作excel,主要是读取excel模板,复制其中的模板sheet页,生成多个sheet页填充相应数据后另存到excel文件,所用到的知识点如下. 一.添加引用和命名空间 添加Microsoft.Office.Interop.Excel引用,它的默认路径是C:\Program Files\Microsoft Visual Studio 9.0\Visual Studio Tools for Office\PIA\Office12\Microsoft.Off

.Net常用技巧_动态加载Dll

原理如下: 1.利用反射进行动态加载和调用. Assembly ass=Assembly.LoadFrom(DllPath); //利用dll的路径加载,同时将此程序集所依赖的程序集加载进来,需后辍名.dll Assembly.LoadFile 只加载指定文件,并不会自动加载依赖程序集.Assmbly.Load无需后辍名 2.加载dll后,需要使用dll中某类. Type type=ass.GetType(“TypeName”);//用类型的命名空间和名称获得类型 3.需要实例化类型,才可以使用

.Net常用技巧_导出 Excel 和相关打印设置

Excel.Application myExcel = new Excel.Application();发 表Excel.Workbook workbookData = myExcel.Application.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);Excel.Worksheet xlSheet = (Worksheet)workbookData.Worksheets[1];//取得sheet1 1) 显示当前窗口: xlSheet.

asp.net 汉字转拼音类

前段时间公司人员反应OA里的汉字拼音首字母不准他们又要用,没办法自己就从网上搜有没有好的,看了很多都是首字母拼不出来或有些字母变为另一个,但最后找了很多还是有一个好用的,暂未发现有不准的. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace O.Common { /// <summary> /// 汉字转拼音 /// </summary> pu

.Net常用技巧_生成物料编号(根据分类代码生成)

这个是自己用的,不一定符合您的需求. using System; using System.Collections.Generic; using System.Text; using EXDataControl; using System.Data; using System.Data.SqlClient; using Utility; namespace MyTool { public class CreateMaterialCode { /// <summary> /// 获取新物料编号(

.Net常用技巧_读取XML某节点例子

注:此例子只是自己在代码中为了读某固定的几个值,写的有点死,所以另作他用的时候请自行修改或扩充 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Xml; namespace MyTool {

.Net常用技巧_传入DataGrid直接导出成Excel

注:非调用OFFICE的DLL方法. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; using Utility; using System.IO; names

.Net常用技巧_生成单据号

自己用的,没整理,代码比较乱,请不要学我. using System; using System.Collections.Generic; using System.Text; using EXDataControl; using System.Data; using System.Data.SqlClient; using Utility; namespace MyTool { public class CreateDocNo { /// <summary> /// 获取单号 /// <