using RoadFlow.Pinyin.data; using RoadFlow.Pinyin.exception; using System.Linq; using RoadFlow.Pinyin.format; namespace RoadFlow.Pinyin { /// /// 处理姓名专用 /// public static class Pinyin4Name { #region // 获取单字拼音 /// /// 获取姓的拼音,如果是复姓则由空格分隔 /// /// 要查询拼音的姓 /// 返回姓的拼音,若未找到姓,则返回null /// 当要获取拼音的字符不是汉字时抛出此异常 public static string GetPinyin(string firstName) { if (firstName.All(PinyinUtil.IsHanzi)) { return NameDB.Instance.GetPinyin(firstName); } // 不是汉字 throw new UnsupportedUnicodeException("不支持的字符: 请输入汉字字符"); } /// /// 获取姓的首字母,如果是复姓则由空格分隔首字母 /// /// 要查询拼音的姓 /// 返回姓的拼音首字母,若未找到姓,则返回null /// 当要获取拼音的字符不是汉字时抛出此异常 public static string GetFirstLetter(string firstName) { var pinyin = GetPinyin(firstName); if (pinyin == null) { return null; } return string.Join(" ", pinyin.Split(' ').Select(py => py[0])); } /// /// 获取格式化后的拼音 /// /// 要查询拼音的姓 /// 输出拼音格式化参数 /// /// /// 返回格式化后的拼音,若未找到姓,则返回null /// 当要获取拼音的字符不是汉字时抛出此异常 public static string GetPinyinWithFormat(string firstName, PinyinOutputFormat format) { return string.Join(" ", GetPinyin(firstName).Split(' ').Select(item => PinyinFormatter.Format(item, format))); } #endregion /// /// 根据拼音查询匹配的姓 /// /// /// 是否全部匹配,为true时,匹配整个拼音,否则匹配开头字符,此参数用于告知传入的拼音是完整拼音还是仅仅是声母 /// 匹配的姓数组 public static string[] GetHanzi(string pinyin, bool matchAll) { return NameDB.Instance.GetHanzi(pinyin.ToLower(), matchAll); } } }