1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > C#获取汉字首字母 多音拼音

C#获取汉字首字母 多音拼音

时间:2018-10-08 22:20:03

相关推荐

C#获取汉字首字母 多音拼音

前面写的几篇都是没有完善的,目前修改这个是最好的

ChineseChar类可在这里找到DLL

/detail/qq873113580/6033615

全部代码

using Microsoft.International.Converters.PinYinConverter;using System;using System.Collections.Generic;using System.Collections.ObjectModel;using System.Linq;using System.Text;using System.Text.RegularExpressions;using System.Threading.Tasks;

namespace ConsoleApplication1{class Program{static void Main(string[] args){List<string> a = PinYingHelper.GetPYList("l奇】");List<string> b = PinYingHelper.GetPYFullList("l奇】");List<string> c = PinYingHelper.GetPYInitialList("l奇】");}}}

using Microsoft.International.Converters.PinYinConverter;using System;using System.Collections.Generic;using System.Collections.ObjectModel;using System.Linq;using System.Text;using System.Text.RegularExpressions;using System.Threading.Tasks;

namespace ConsoleApplication1{public class PinYingHelper{#region 获取汉字首字母包含多音如 “奇” 返回 new List<string>{"Q","J"};/// <summary>/// 获取汉字首字母包含多音/// </summary>/// <param name="str"></param>/// <returns></returns>public static List<string> GetPYInitialList(string str){List<string> list = new List<string>();return GetPYInitialList(GetPYList(str));}

/// <summary>/// 获取汉字首字母包含多音/// </summary>/// <param name="pyList">传入GetPY这个方法返回的对象</param>/// <returns></returns>public static List<string> GetPYInitialList(List<string> pyList){List<string> list = new List<string>();foreach (string py in pyList){string[] strs = py.Split('$');StringBuilder sb = new StringBuilder();foreach (string s in strs){if (s.Length > 0){sb.Append(s.Substring(0, 1));}}list.Add(sb.ToString());}return list;}#endregion

#region 获取拼音包含多音,如"奇"返回new List<string>{"QI","JI"};/// <summary>/// 获取拼音包含多音/// </summary>/// <param name="pyList">传入GetPY这个方法返回的对象</param>/// <returns></returns>public static List<string> GetPYFullList(List<string> pyList){List<string> list = new List<string>();foreach (string py in pyList){list.Add(py.Replace("$", ""));}return list;}/// <summary>/// 获取拼音包含多音/// </summary>/// <param name="str"></param>/// <returns></returns>public static List<string> GetPYFullList(string str){List<string> list = new List<string>();return GetPYFullList(GetPYList(str));}#endregion

#region 获取汉字的拼音包含多音字用"$"连接,如 "奇怪" 返回 new List<string>{"QI$GUAI","JI$GUAI"};/// <summary>/// 获取汉字的拼音包含多音字用"$"连接/// </summary>/// <param name="pyList"></param>/// <param name="str"></param>/// <param name="isFirst"></param>/// <returns></returns>public static List<string> GetPYList(string str, List<string> pyList = null, bool isFirst = true){if (pyList == null){pyList = new List<string>();}if (str.Length > 1){string tmp = str.Substring(0, 1);string remain = str.Substring(1);List<string> tmpList = GetPYALL(tmp);if (isFirst){pyList.AddRange(tmpList);pyList = GetPYList(remain, pyList, false);}else{pyList = GetPYList(remain, CombinationList(pyList, tmpList), false);}}else{if (pyList.Count > 0){pyList = CombinationList(pyList, GetPYALL(str));}else{pyList.AddRange(GetPYALL(str));}}return pyList;}#endregion

#region 组合2个List,内部使用/// <summary>/// 组合2个List/// </summary>/// <param name="list1"></param>/// <param name="list2"></param>/// <returns></returns>private static List<string> CombinationList(List<string> list1, List<string> list2){List<string> tmpPYList = new List<string>();foreach (string i in list1){foreach (string j in list2){tmpPYList.Add(i + "$" + j);}}return tmpPYList;}#endregion

#region 获取全拼,包含多音,内部使用/// <summary>/// 获取全拼,包含多音/// </summary>/// <param name="str"></param>/// <returns>返回一个多音集合</returns>private static List<string> GetPYALL(string str){List<string> soruceList = new List<string>();char[] chars = str.ToCharArray();for (int i = 0; i < chars.Length; i++){if (new Regex(@"^[\u4e00-\u9fa5]+$").Match(chars[i].ToString()).Success){ChineseChar chineseChar = new ChineseChar(chars[i]);ReadOnlyCollection<string> pyColl = chineseChar.Pinyins;//循环生成首字母的笛卡尔积,存储到临时拼音列表foreach (var item in pyColl){if (item != null){string temp = item.Remove(item.Length - 1, 1);if (!soruceList.Contains(temp)){soruceList.Add(temp);}}}}else//不是汉字的{soruceList.Add(chars[i].ToString().ToUpper());}}return soruceList;}#endregion}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。