博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c#汉字转拼音首字母全拼支持多音字
阅读量:4680 次
发布时间:2019-06-09

本文共 3049 字,大约阅读时间需要 10 分钟。

1.首先在NuGet安装pingyinConverter

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

 官网了解:

 

3.直接上代码了

1 public class PinYinConverterHelp 2     { 3         public static PingYinModel GetTotalPingYin(string str) 4         { 5             var chs = str.ToCharArray(); 6             //记录每个汉字的全拼 7             Dictionary
> totalPingYins = new Dictionary
>(); 8 for (int i = 0; i < chs.Length; i++) 9 {10 var pinyins = new List
();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 else19 {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
(),34 FirstPingYin=new List
()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 else45 {46 ////全拼循环匹配(根据个人需求来选择此代码)47 //var newTotalPingYins = new List
();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
();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 ///
69 /// 获取首字母并转换成大写70 /// 71 ///
72 ///
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 PingYinModel79 {80 public List
TotalPingYin { get; internal set; }81 public List
FirstPingYin { get; internal set; }82 }83 }

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

转载于:https://www.cnblogs.com/dandan00056/p/11283102.html

你可能感兴趣的文章