欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C#教程

當(dāng)前位置:主頁 > 軟件編程 > C#教程 >

C#漢字轉(zhuǎn)拼音實(shí)例(支持多音字)

來源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:C#教程|點(diǎn)擊: 次

之前由于項(xiàng)目需要,中間需要一個(gè)漢字轉(zhuǎn)拼音和首拼的功能來做查詢,感覺這種功能基本已經(jīng)成熟化了,于是查找了相關(guān)的代碼,首先引入眼簾的是下面兩篇文章

1.C# 漢字轉(zhuǎn)拼音(支持GB2312字符集中所有漢字)

2.Javascript實(shí)現(xiàn)漢字和拼音互轉(zhuǎn)的終極方案

寫的比較全也很詳細(xì),都有提供源碼,大家可以參考下。

由于考慮到接口的需要,于是參考了 第一篇,文章中作者的源碼基本能滿足漢字轉(zhuǎn)拼音的需要,對(duì)于其他特殊的字符,也可以在進(jìn)行添加補(bǔ)充,不足之處就是不支持多音字,由于需要支持多音字的查詢,所以后面有查了下其他的文章,發(fā)現(xiàn)還沒有現(xiàn)成的文章(也可能本人的搜索水平比較水)。后來查找發(fā)現(xiàn)對(duì)于漢字轉(zhuǎn)拼音,原來微軟已經(jīng)提供了 Microsoft Visual Studio International Pack ,而且很強(qiáng)大。于是試了一下

首先在nuget引用對(duì)應(yīng)的包

查找 PinYinConverter

簡單的demo

小試一下,使用也非常簡單,只要直接使用ChineseChar類進(jìn)行裝換就好

string ch = Console.ReadLine();
ChineseChar cc = new ChineseChar(ch[0]);
var pinyins = cc.Pinyins.ToList();
pinyins.ForEach(Console.WriteLine);

結(jié)果如下:

我們可以看到, 行 的多音字有 hang,heng,xing 三個(gè),這里連音標(biāo)也出來了,確實(shí)很方便。而我需要的功能是輸入 銀行 ,然后轉(zhuǎn)換為拼音是 yinhang,yinheng,yinxing,  首拼是 yh,yx。有ChineseChar 這個(gè)類的話做起來思路就簡單了。

漢字轉(zhuǎn)拼音類封裝

1.首先對(duì)輸入的漢字進(jìn)行拆分

2.接著每個(gè)漢字用ChineseChar 獲取多個(gè)拼音

3.然后除去數(shù)字,去重,提取首字符,再在進(jìn)行組合就好了

于是寫了個(gè)幫助類進(jìn)行裝換,代碼如下:

  public class PinYinConverterHelp
  {
    public static PingYinModel GetTotalPingYin(string str)
    {
      var chs = str.ToCharArray();
      //記錄每個(gè)漢字的全拼
      Dictionary<int, List<string>> totalPingYins = new Dictionary<int, List<string>>();
      for (int i = 0; i < chs.Length; i++)
      {
        var pinyins = new List<string>();
        var ch = chs[i];
        //是否是有效的漢字
        if (ChineseChar.IsValidChar(ch))
        {
          ChineseChar cc = new ChineseChar(ch);
          pinyins = cc.Pinyins.Where(p => !string.IsNullOrWhiteSpace(p)).ToList();
        }
        else
        {
          pinyins.Add(ch.ToString());
        }

        //去除聲調(diào),轉(zhuǎn)小寫
        pinyins = pinyins.ConvertAll(p => Regex.Replace(p, @"\d", "").ToLower());
        //去重
        pinyins = pinyins.Where(p => !string.IsNullOrWhiteSpace(p)).Distinct().ToList();
        if (pinyins.Any())
        {
          totalPingYins[i] = pinyins;
        }
      }
      PingYinModel result = new PingYinModel();
      foreach (var pinyins in totalPingYins)
      {
        var items = pinyins.Value;
        if (result.TotalPingYin.Count <= 0)
        {
          result.TotalPingYin = items;
          result.FirstPingYin = items.ConvertAll(p => p.Substring(0, 1)).Distinct().ToList();
        }
        else
        {
          //全拼循環(huán)匹配
          var newTotalPingYins = new List<string>();
          foreach (var totalPingYin in result.TotalPingYin)
          {
            newTotalPingYins.AddRange(items.Select(item => totalPingYin + item));
          }
          newTotalPingYins = newTotalPingYins.Distinct().ToList();
          result.TotalPingYin = newTotalPingYins;

          //首字母循環(huán)匹配
          var newFirstPingYins = new List<string>();
          foreach (var firstPingYin in result.FirstPingYin)
          {
            newFirstPingYins.AddRange(items.Select(item => firstPingYin + item.Substring(0, 1)));
          }
          newFirstPingYins = newFirstPingYins.Distinct().ToList();
          result.FirstPingYin = newFirstPingYins;
        }
      }
      return result;
    }
  }

  public class PingYinModel
  {
    public PingYinModel()
    {
      TotalPingYin = new List<string>();
      FirstPingYin = new List<string>();
    }

    //全拼
    public List<string> TotalPingYin { get; set; }

    //首拼
    public List<string> FirstPingYin { get; set; }
  }

調(diào)用方式:

 Console.WriteLine("請(qǐng)輸入中文:");
 string str = Console.ReadLine();
var strs = PinYinConverterHelp.GetTotalPingYin(str).TotalPingYin;
var frists = PinYinConverterHelp.GetTotalPingYin(str).FirstPingYin;
 Console.WriteLine("全拼音:" + String.Join(",", strs));
 Console.WriteLine("首音:" + String.Join(",", frists));
Console.WriteLine();

結(jié)果:

 

目前試過一些生僻字都是能支持,對(duì)于一些太偏的還沒試過,不過對(duì)于一般漢字轉(zhuǎn)拼音的,多音字支持這里就已經(jīng)足夠了。

這里僅僅是使用了 Microsoft Visual Studio International Pack 這個(gè)擴(kuò)展包里面的漢字轉(zhuǎn)拼音功能,其實(shí)里面還有中文、日文、韓文、英語等各國語言包,并提供方法實(shí)現(xiàn)互轉(zhuǎn)、獲、獲取字?jǐn)?shù)、甚至獲取筆畫數(shù)等等強(qiáng)大的功能,有興趣的朋友可以自行查詢下它的api。

 源碼分享

分享是一種美德,有時(shí)候牛逼的文章可以提高我們的技術(shù)層面,但有時(shí)候更多的需求是業(yè)務(wù)層面,很多小知識(shí)應(yīng)用的分享卻可以幫我們提高業(yè)務(wù)層面的問題。只要分享的知識(shí)點(diǎn)有用,不誤人子弟,哪怕大小都是一種學(xué)習(xí),所以也希望大家能勇于分享。

 最后,源碼分享出來給大家,如果有錯(cuò)誤和不足的地方,也希望指正

地址:demo 

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。

上一篇:c#單例模式(Singleton)的6種實(shí)現(xiàn)

欄    目:C#教程

下一篇:C# 刪除字符串中的中文(實(shí)例分享)

本文標(biāo)題:C#漢字轉(zhuǎn)拼音實(shí)例(支持多音字)

本文地址:http://mengdiqiu.com.cn/a1/C_jiaocheng/6071.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有