情景描述:由于任务需要,现有一用户表数据,用户名 字段 在新增用户时,输入中文和拼音两种,先要区分同时含有中文和拼音字母的用户名。由于数据很多,可以通过一段代码完成查询:

前提:在阅读本文之前可以先了解前一篇文章:  C# 汉字转拼音 将中文转换成拼音  (注:该方法只支持常规字,多音字和生僻字不支持)

创建控制台程序:

新建类:ChnToPh.cs

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Text.RegularExpressions;
  6. using System.Threading.Tasks;
  7.  
  8. namespace npoi
  9. {
  10. public class ChnToPh
  11. {
  12. //定义拼音区编码数组
  13. private static int[] getValue = new int[]
  14. {
  15. -,-,-,-,-,-,-,-,-,-,-,-,
  16. -,-,-,-,-,-,-,-,-,-,-,-,
  17. -,-,-,-,-,-,-,-,-,-,-,-,
  18. -,-,-,-,-,-,-,-,-,-,-,-,
  19. -,-,-,-,-,-,-,-,-,-,-,-,
  20. -,-,-,-,-,-,-,-,-,-,-,-,
  21. -,-,-,-,-,-,-,-,-,-,-,-,
  22. -,-,-,-,-,-,-,-,-,-, -,-,
  23. -,-,-,-,-,-,-,-,-,-,-,-,
  24. -,-,-,-,-,-,-,-,-,-,-,-,
  25. -,-,-,-,-,-,-,-,-,-,-,-,
  26. -,-,-,-,-,-,-,-,-,-,-,-,
  27. -,-,-,-,-,-,-,-,-,-,-,-,
  28. -,-,-,-,-,-,-,-,-,-,-,-,
  29. -,-,-,-,-,-,-,-,-,-,-,-,
  30. -,-,-,-,-,-,-,-,-,-,-,-,
  31. -,-,-,-,-,-,-,-,-,-,-,-,
  32. -,-,-,-,-,-,-,-,-,-,-,-,
  33. -,-,-,-,-,-,-,-,-,-,-,-,
  34. -,-,-,-,-,-,-,-,-,-,-,-,
  35. -,-,-,-,-,-,-,-,-,-,-,-,
  36. -,-,-,-,-,-,-,-,-,-,-,-,
  37. -,-,-,-,-,-,-,-,-,-,-,-,
  38. -,-,-,-,-,-,-,-,-,-,-,-,
  39. -,-,-,-,-,-,-,-,-,-,-,-,
  40. -,-,-,-,-,-,-,-,-,-,-,-,
  41. -,-,-,-,-,-,-,-,-,-,-,-,
  42. -,-,-,-,-,-,-,-,-,-,-,-,
  43. -,-,-,-,-,-,-,-,-,-,-,-,
  44. -,-,-,-,-,-,-,-,-,-,-,-,
  45. -,-,-,-,-,-,-,-,-,-,-,-,
  46. -,-,-,-,-,-,-,-,-,-,-,-,
  47. -,-,-,-,-,-,-,-,-,-,-,-
  48. };
  49. //定义拼音数组
  50. private static string[] getName = new string[]
  51. {
  52. "A","Ai","An","Ang","Ao","Ba","Bai","Ban","Bang","Bao","Bei","Ben",
  53. "Beng","Bi","Bian","Biao","Bie","Bin","Bing","Bo","Bu","Ba","Cai","Can",
  54. "Cang","Cao","Ce","Ceng","Cha","Chai","Chan","Chang","Chao","Che","Chen","Cheng",
  55. "Chi","Chong","Chou","Chu","Chuai","Chuan","Chuang","Chui","Chun","Chuo","Ci","Cong",
  56. "Cou","Cu","Cuan","Cui","Cun","Cuo","Da","Dai","Dan","Dang","Dao","De",
  57. "Deng","Di","Dian","Diao","Die","Ding","Diu","Dong","Dou","Du","Duan","Dui",
  58. "Dun","Duo","E","En","Er","Fa","Fan","Fang","Fei","Fen","Feng","Fo",
  59. "Fou","Fu","Ga","Gai","Gan","Gang","Gao","Ge","Gei","Gen","Geng","Gong",
  60. "Gou","Gu","Gua","Guai","Guan","Guang","Gui","Gun","Guo","Ha","Hai","Han",
  61. "Hang","Hao","He","Hei","Hen","Heng","Hong","Hou","Hu","Hua","Huai","Huan",
  62. "Huang","Hui","Hun","Huo","Ji","Jia","Jian","Jiang","Jiao","Jie","Jin","Jing",
  63. "Jiong","Jiu","Ju","Juan","Jue","Jun","Ka","Kai","Kan","Kang","Kao","Ke",
  64. "Ken","Keng","Kong","Kou","Ku","Kua","Kuai","Kuan","Kuang","Kui","Kun","Kuo",
  65. "La","Lai","Lan","Lang","Lao","Le","Lei","Leng","Li","Lia","Lian","Liang",
  66. "Liao","Lie","Lin","Ling","Liu","Long","Lou","Lu","Lv","Luan","Lue","Lun",
  67. "Luo","Ma","Mai","Man","Mang","Mao","Me","Mei","Men","Meng","Mi","Mian",
  68. "Miao","Mie","Min","Ming","Miu","Mo","Mou","Mu","Na","Nai","Nan","Nang",
  69. "Nao","Ne","Nei","Nen","Neng","Ni","Nian","Niang","Niao","Nie","Nin","Ning",
  70. "Niu","Nong","Nu","Nv","Nuan","Nue","Nuo","O","Ou","Pa","Pai","Pan",
  71. "Pang","Pao","Pei","Pen","Peng","Pi","Pian","Piao","Pie","Pin","Ping","Po",
  72. "Pu","Qi","Qia","Qian","Qiang","Qiao","Qie","Qin","Qing","Qiong","Qiu","Qu",
  73. "Quan","Que","Qun","Ran","Rang","Rao","Re","Ren","Reng","Ri","Rong","Rou",
  74. "Ru","Ruan","Rui","Run","Ruo","Sa","Sai","San","Sang","Sao","Se","Sen",
  75. "Seng","Sha","Shai","Shan","Shang","Shao","She","Shen","Sheng","Shi","Shou","Shu",
  76. "Shua","Shuai","Shuan","Shuang","Shui","Shun","Shuo","Si","Song","Sou","Su","Suan",
  77. "Sui","Sun","Suo","Ta","Tai","Tan","Tang","Tao","Te","Teng","Ti","Tian",
  78. "Tiao","Tie","Ting","Tong","Tou","Tu","Tuan","Tui","Tun","Tuo","Wa","Wai",
  79. "Wan","Wang","Wei","Wen","Weng","Wo","Wu","Xi","Xia","Xian","Xiang","Xiao",
  80. "Xie","Xin","Xing","Xiong","Xiu","Xu","Xuan","Xue","Xun","Ya","Yan","Yang",
  81. "Yao","Ye","Yi","Yin","Ying","Yo","Yong","You","Yu","Yuan","Yue","Yun",
  82. "Za", "Zai","Zan","Zang","Zao","Ze","Zei","Zen","Zeng","Zha","Zhai","Zhan",
  83. "Zhang","Zhao","Zhe","Zhen","Zheng","Zhi","Zhong","Zhou","Zhu","Zhua","Zhuai","Zhuan",
  84. "Zhuang","Zhui","Zhun","Zhuo","Zi","Zong","Zou","Zu","Zuan","Zui","Zun","Zuo"
  85. };
  86. //建立一个convertCh方法用于将汉字转换成全拼的拼音,其中,参数代表汉字字符串,此方法的返回值是转换后的拼音字符串
  87. public static string convertCh(string Chstr)
  88. {
  89. Regex reg = new Regex("^[\u4e00-\u9fa5]$");//验证是否输入汉字
  90. byte[] arr = new byte[];
  91. string pystr = "";
  92. int asc = , M1 = , M2 = ;
  93. char[] mChar = Chstr.ToCharArray();//获取汉字对应的字符数组
  94. for (int j = ; j < mChar.Length; j++)
  95. {
  96. //如果输入的是汉字
  97. if (reg.IsMatch(mChar[j].ToString()))
  98. {
  99. arr = System.Text.Encoding.Default.GetBytes(mChar[j].ToString());
  100. M1 = (short)(arr[]);
  101. M2 = (short)(arr[]);
  102. asc = M1 * + M2 - ;
  103. if (asc > && asc < )
  104. {
  105. pystr += mChar[j];
  106. }
  107. else
  108. {
  109. switch (asc)
  110. {
  111. case -:
  112. pystr += "Zhen"; break;
  113. case -:
  114. pystr += "Qian"; break;
  115. case -:
  116. pystr += "Jia"; break;
  117. case -:
  118. pystr += "Ge"; break;
  119. case -:
  120. pystr += "Ga"; break;
  121. case -:
  122. pystr += "La"; break;
  123. case -:
  124. pystr += "Chen"; break;
  125. case -:
  126. pystr += "Mao"; break;
  127. case -:
  128. pystr += "Mao"; break;
  129. case -:
  130. pystr += "Die"; break;
  131. case -:
  132. pystr += "Tian"; break;
  133. default:
  134. for (int i = (getValue.Length - ); i >= ; i--)
  135. {
  136. if (getValue[i] <= asc)//判断汉字的拼音区编码是否在指定范围内
  137. {
  138. pystr += getName[i];//如果不超出范围则获取对应的拼音
  139. break;
  140. }
  141. }
  142. break;
  143. }
  144. }
  145. }
  146. else//如果不是汉字
  147. {
  148. pystr += mChar[j].ToString();//如果不是汉字则返回
  149. }
  150. }
  151. return pystr;//返回获取到的汉字拼音
  152. }
  153. }
  154. }

在Program.cs加入以下代码

  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Text.RegularExpressions;
  7. using System.Threading.Tasks;
  8.  
  9. namespace npoi
  10. {
  11. class Program
  12. {
  13. static void Main(string[] args)
  14. {
  15. string path = @"C:\Users\Jie\Desktop\data.txt";
  16. System.Text.Encoding.GetEncoding("gb2312");
  17. //ReadAllLines 必须设置默认编码,不然读取汉字会乱码
  18. List<string> list = File.ReadAllLines(path, System.Text.Encoding.Default).ToList();
  19. List<string> listhz = new List<string>();
  20. List<string> listzm = new List<string>();
  21. foreach (string s in list) {
  22. if (Regex.IsMatch(s, @"^[\u4e00-\u9fa5]+$"))
  23. {
  24.  
  25. listhz.Add(s);
  26. }
  27. else {
  28.  
  29. listzm.Add(s);
  30. }
  31. }
  32.  
  33. foreach (string hz in listhz) {
  34. var hz2py = ChnToPh.convertCh(hz);
  35.  
  36. foreach(string zm in listzm)
  37. {
  38. if (zm.ToLower() == hz2py.ToLower()) {
  39.  
  40. Console.WriteLine(string.Format("{0}:{1}", hz, zm));
  41. }
  42. }
  43. }
  44.  
  45. Console.ReadLine();
  46. }
  47. }
  48. }

新建 data.txt 如下

放置对应的目录。运行代码 如图:

C#读出文本文件内容,遍历数组筛选出 含有汉字对应的拼音字符的更多相关文章

  1. jquery实现对象数组 筛选出每条记录中的特定属性字段 及根据某个属性值筛选出指定的元素

    jquery实现对象数组 筛选出每条记录中的特定属性字段 直接上图: 源码: /** * 对后端返回的数据,筛选出符合报表的列项,多余的列项去除 */ function filterParams(da ...

  2. phpcms抛出的二维数组转移到js,js中for....in遍历数组,用“.”连接来读出一维数组值

    直切正题: 1.phpcms在模版中读出数组有很多中方法,如,{pc:content action="lists"}或{pc:get sql=""},经过{lo ...

  3. jquery遍历数组与筛选数组的方法

    grepgrep()方法用于数组元素过滤筛选 grep(array,callback,invert)array:待过滤数组;callback:处理数组中的每个元素,并过滤元素,该函数中包含两个参数,第 ...

  4. js下拉框:从数组中筛选出匹配的数据

    handleChange(val) { let obj = {} // 遍历数组 obj = this.options.find(item => { // 筛选出匹配的数据 return ite ...

  5. javascript 常见数组操作( 1、数组整体元素修改 2、 数组筛选 3、jquery 元素转数组 4、获取两个数组中相同部分或者不同部分 5、数组去重并倒序排序 6、数组排序 7、数组截取slice 8、数组插入、删除splice(需明确位置) 9、数组遍历 10、jQuery根据元素值删除数组元素的方)

    主要内容: 1.数组整体元素修改 2. 数组筛选 3.jquery 元素转数组 4.获取两个数组中相同部分或者不同部分 5.数组去重并倒序排序 6.数组排序 7.数组截取slice 8.数组插入.删除 ...

  6. JavaScript for/in 语句 遍历数组内容

    for-in遍历 for-in是为遍历对象而设计的,不适用于遍历数组. 遍历数组的缺点:数组的下标index值是数字,for-in遍历的index值"0","1" ...

  7. C#写入和读出文本文件

    C#写入和读出文本文件 写入文本文件 class WriteTextFile { static void Main() { //如果文件不存在,则创建:存在则覆盖 //该方法写入字符数组换行显示 st ...

  8. 如何从两个List中筛选出相同的值

    问题 现有社保卡和身份证若干,想要匹配筛选出一一对应的社保卡和身份证. 转换为List socialList,和List idList,从二者中找出匹配的社保卡. 模型 创建社保卡类 /** * @a ...

  9. jquery 选择对象随心所欲,遍历数组更是易如反掌

    jquery只要研究总结透彻了,那选择对象就会随心所欲,遍历数组更是易如反掌.选对对象,才能“娶妻生子”,才能有后续的数据处理.呵呵遍历对很关键. 怕只怕,学东西浅尝辄止一知半解.本篇特别研究总结jq ...

随机推荐

  1. 利用Aspose.Cells导出Datatable数据

    面对一些的格式各样的到处数据的要求,自学了一点 Aspose.Cells中操作Excel知识,如下代码: /// <summary> /// DataTable导出Excel /// &l ...

  2. 判断输入的值是否为Double

    using System; using System.Collections.Generic; using System.Text; namespace TDRFactory { public cla ...

  3. angular中的ng-click指令案例

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. poj3083 Children of the Candy Corn 深搜+广搜

    这道题有深搜和广搜.深搜还有要求,靠左或靠右.下面以靠左为例,可以把简单分为上北,下南,左西,右东四个方向.向东就是横坐标i不变,纵坐标j加1(i与j其实就是下标).其他方向也可以这样确定.通过上一步 ...

  5. EF Code First连接现有数据库

    作为一个初入学习.net MVC4 的新手,想写一写今天碰到的问题,做一个总结. 首先我想利用EF Code First来连接我现有数据库,而不是通过EF Code First来自动生成数据库和表. ...

  6. Http状态码大全(200、404、500等)

    基本涵盖了所有问题 HTTP 400 – 请求无效HTTP 401.1 – 未授权:登录失败HTTP 401.2 – 未授权:服务器配置问题导致登录失败HTTP 401.3 – ACL 禁止访问资源H ...

  7. Win10怎么批量修改文件后缀名?

    Win10怎么批量修改文件后缀名?一般我们都是右击重命名,但是,如果要改的文件很多的话,这样做事不行的,该怎么批量修改后缀名呢?下面我们一起来看看两种解决办法 通常我们修改文件后缀名都是右击>& ...

  8. Java中类的定义

    成员变量:对应事物的属性 成员方法:对应事物的行为 类定义的格式 定义类:就是定义类的成员,包括成员变量和成员方法 成员变量:和以前定义变量几乎是一样的.只不过位置发生了改变.在类中,方法外. 成员方 ...

  9. MySQL_pymysql模块

    安装:pip install pymysql 基本操作 import pymysql conn=pymysql.connect(host=',database='lary',charset='utf8 ...

  10. mysql 最大连接数

    方式一: 一次性修改  服务重启后还原 查看  show variables like 'max_connections%'; 修改 set GLOBAL max_connections=1024; ...