zoukankan      html  css  js  c++  java
  • c#汉字转拼音首字母全拼支持多音字

    1.首先在NuGet安装pingyinConverter

    2.下载-安装-引用ChineseChar.dll到项目中

     官网了解:http://www.microsoft.com/zh-cn/download/confirmation.aspx?id=15251

    3.直接上代码了

     1 public class PinYinConverterHelp
     2     {
     3         public static PingYinModel GetTotalPingYin(string str)
     4         {
     5             var chs = str.ToCharArray();
     6             //记录每个汉字的全拼
     7             Dictionary<int, List<string>> totalPingYins = new Dictionary<int, List<string>>();
     8             for (int i = 0; i < chs.Length; i++)
     9             {
    10                 var pinyins = new List<string>();
    11                 var ch = chs[i];
    12                 //是否是有效的汉字
    13                 if (ChineseChar.IsValidChar(ch))
    14                 {
    15                     ChineseChar cc = new ChineseChar(ch);
    16                     pinyins = cc.Pinyins.Where(p => !string.IsNullOrWhiteSpace(p)).ToList();
    17                 }
    18                 else
    19                 {
    20                     pinyins.Add(ch.ToString());
    21                 }
    22 
    23                 //去除声调,转小写
    24                 pinyins = pinyins.ConvertAll(p => Regex.Replace(p, @"d", "").ToLower());
    25                 //去重
    26                 pinyins = pinyins.Where(p => !string.IsNullOrWhiteSpace(p)).Distinct().ToList();
    27                 if (pinyins.Any())
    28                 {
    29                     totalPingYins[i] = pinyins;
    30                 }
    31             }
    32             PingYinModel result = new PingYinModel() {
    33                 TotalPingYin=new List<string>(),
    34                 FirstPingYin=new List<string>()
    35             };
    36             foreach (var pinyins in totalPingYins)
    37             {
    38                 var items = pinyins.Value;
    39                 if (result.TotalPingYin.Count <= 0)
    40                 {
    41                     result.TotalPingYin = items;
    42                     result.FirstPingYin = items.ConvertAll(p => p.Substring(0, 1)).Distinct().ToList();
    43                 }
    44                 else
    45                 {
    46                     ////全拼循环匹配(根据个人需求来选择此代码)
    47                     //var newTotalPingYins = new List<string>();
    48                     //foreach (var totalPingYin in result.TotalPingYin)
    49                     //{
    50                     //    newTotalPingYins.AddRange(items.Select(item => totalPingYin + item));
    51                     //}
    52                     //newTotalPingYins = newTotalPingYins.Distinct().ToList();
    53                     //result.TotalPingYin = newTotalPingYins;
    54 
    55                     //首字母循环匹配
    56                     var newFirstPingYins = new List<string>();
    57                     foreach (var firstPingYin in result.FirstPingYin)
    58                     {
    59                         newFirstPingYins.AddRange(items.Select(item => firstPingYin + item.Substring(0, 1)));
    60                     }
    61                     newFirstPingYins = newFirstPingYins.Distinct().ToList();
    62                     result.FirstPingYin = newFirstPingYins;
    63                 }
    64             }
    65             return result;
    66         }
    67 
    68         /// <summary>
    69         /// 获取首字母并转换成大写
    70         /// </summary>
    71         /// <param name="str"></param>
    72         /// <returns></returns>
    73         public static string GetPingYinFirstUpper(string str)
    74         {
    75             var output = GetTotalPingYin(str);
    76             return string.Join("", output.FirstPingYin.ToArray()).ToUpper();
    77         }
    78         public class PingYinModel
    79         {
    80             public List<string> TotalPingYin { get; internal set; }
    81             public List<string> FirstPingYin { get; internal set; }
    82         }
    83

     4.不用感谢,请叫我红领巾

  • 相关阅读:
    document.getElementById的简便方式
    uri编解码
    javascript数组
    前端网站收藏
    html5 canvas
    interview material
    Merge into(oracle)
    机器学习入门二 ----- 机器学习术语表
    机器学习入门一 ------- 什么是机器学习,机器学习的在实际中的用处
    Dubbo 源码分析系列之一环境搭建
  • 原文地址:https://www.cnblogs.com/dandan00056/p/11283102.html
Copyright © 2011-2022 走看看