C#读出文本文件内容,遍历数组筛选出 含有汉字对应的拼音字符
情景描述:由于任务需要,现有一用户表数据,用户名 字段 在新增用户时,输入中文和拼音两种,先要区分同时含有中文和拼音字母的用户名。由于数据很多,可以通过一段代码完成查询:
前提:在阅读本文之前可以先了解前一篇文章: C# 汉字转拼音 将中文转换成拼音 (注:该方法只支持常规字,多音字和生僻字不支持)
创建控制台程序:
新建类:ChnToPh.cs
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Text.RegularExpressions;
- using System.Threading.Tasks;
- namespace npoi
- {
- public class ChnToPh
- {
- //定义拼音区编码数组
- private static int[] getValue = new int[]
- {
- -,-,-,-,-,-,-,-,-,-,-,-,
- -,-,-,-,-,-,-,-,-,-,-,-,
- -,-,-,-,-,-,-,-,-,-,-,-,
- -,-,-,-,-,-,-,-,-,-,-,-,
- -,-,-,-,-,-,-,-,-,-,-,-,
- -,-,-,-,-,-,-,-,-,-,-,-,
- -,-,-,-,-,-,-,-,-,-,-,-,
- -,-,-,-,-,-,-,-,-,-, -,-,
- -,-,-,-,-,-,-,-,-,-,-,-,
- -,-,-,-,-,-,-,-,-,-,-,-,
- -,-,-,-,-,-,-,-,-,-,-,-,
- -,-,-,-,-,-,-,-,-,-,-,-,
- -,-,-,-,-,-,-,-,-,-,-,-,
- -,-,-,-,-,-,-,-,-,-,-,-,
- -,-,-,-,-,-,-,-,-,-,-,-,
- -,-,-,-,-,-,-,-,-,-,-,-,
- -,-,-,-,-,-,-,-,-,-,-,-,
- -,-,-,-,-,-,-,-,-,-,-,-,
- -,-,-,-,-,-,-,-,-,-,-,-,
- -,-,-,-,-,-,-,-,-,-,-,-,
- -,-,-,-,-,-,-,-,-,-,-,-,
- -,-,-,-,-,-,-,-,-,-,-,-,
- -,-,-,-,-,-,-,-,-,-,-,-,
- -,-,-,-,-,-,-,-,-,-,-,-,
- -,-,-,-,-,-,-,-,-,-,-,-,
- -,-,-,-,-,-,-,-,-,-,-,-,
- -,-,-,-,-,-,-,-,-,-,-,-,
- -,-,-,-,-,-,-,-,-,-,-,-,
- -,-,-,-,-,-,-,-,-,-,-,-,
- -,-,-,-,-,-,-,-,-,-,-,-,
- -,-,-,-,-,-,-,-,-,-,-,-,
- -,-,-,-,-,-,-,-,-,-,-,-,
- -,-,-,-,-,-,-,-,-,-,-,-
- };
- //定义拼音数组
- private static string[] getName = new string[]
- {
- "A","Ai","An","Ang","Ao","Ba","Bai","Ban","Bang","Bao","Bei","Ben",
- "Beng","Bi","Bian","Biao","Bie","Bin","Bing","Bo","Bu","Ba","Cai","Can",
- "Cang","Cao","Ce","Ceng","Cha","Chai","Chan","Chang","Chao","Che","Chen","Cheng",
- "Chi","Chong","Chou","Chu","Chuai","Chuan","Chuang","Chui","Chun","Chuo","Ci","Cong",
- "Cou","Cu","Cuan","Cui","Cun","Cuo","Da","Dai","Dan","Dang","Dao","De",
- "Deng","Di","Dian","Diao","Die","Ding","Diu","Dong","Dou","Du","Duan","Dui",
- "Dun","Duo","E","En","Er","Fa","Fan","Fang","Fei","Fen","Feng","Fo",
- "Fou","Fu","Ga","Gai","Gan","Gang","Gao","Ge","Gei","Gen","Geng","Gong",
- "Gou","Gu","Gua","Guai","Guan","Guang","Gui","Gun","Guo","Ha","Hai","Han",
- "Hang","Hao","He","Hei","Hen","Heng","Hong","Hou","Hu","Hua","Huai","Huan",
- "Huang","Hui","Hun","Huo","Ji","Jia","Jian","Jiang","Jiao","Jie","Jin","Jing",
- "Jiong","Jiu","Ju","Juan","Jue","Jun","Ka","Kai","Kan","Kang","Kao","Ke",
- "Ken","Keng","Kong","Kou","Ku","Kua","Kuai","Kuan","Kuang","Kui","Kun","Kuo",
- "La","Lai","Lan","Lang","Lao","Le","Lei","Leng","Li","Lia","Lian","Liang",
- "Liao","Lie","Lin","Ling","Liu","Long","Lou","Lu","Lv","Luan","Lue","Lun",
- "Luo","Ma","Mai","Man","Mang","Mao","Me","Mei","Men","Meng","Mi","Mian",
- "Miao","Mie","Min","Ming","Miu","Mo","Mou","Mu","Na","Nai","Nan","Nang",
- "Nao","Ne","Nei","Nen","Neng","Ni","Nian","Niang","Niao","Nie","Nin","Ning",
- "Niu","Nong","Nu","Nv","Nuan","Nue","Nuo","O","Ou","Pa","Pai","Pan",
- "Pang","Pao","Pei","Pen","Peng","Pi","Pian","Piao","Pie","Pin","Ping","Po",
- "Pu","Qi","Qia","Qian","Qiang","Qiao","Qie","Qin","Qing","Qiong","Qiu","Qu",
- "Quan","Que","Qun","Ran","Rang","Rao","Re","Ren","Reng","Ri","Rong","Rou",
- "Ru","Ruan","Rui","Run","Ruo","Sa","Sai","San","Sang","Sao","Se","Sen",
- "Seng","Sha","Shai","Shan","Shang","Shao","She","Shen","Sheng","Shi","Shou","Shu",
- "Shua","Shuai","Shuan","Shuang","Shui","Shun","Shuo","Si","Song","Sou","Su","Suan",
- "Sui","Sun","Suo","Ta","Tai","Tan","Tang","Tao","Te","Teng","Ti","Tian",
- "Tiao","Tie","Ting","Tong","Tou","Tu","Tuan","Tui","Tun","Tuo","Wa","Wai",
- "Wan","Wang","Wei","Wen","Weng","Wo","Wu","Xi","Xia","Xian","Xiang","Xiao",
- "Xie","Xin","Xing","Xiong","Xiu","Xu","Xuan","Xue","Xun","Ya","Yan","Yang",
- "Yao","Ye","Yi","Yin","Ying","Yo","Yong","You","Yu","Yuan","Yue","Yun",
- "Za", "Zai","Zan","Zang","Zao","Ze","Zei","Zen","Zeng","Zha","Zhai","Zhan",
- "Zhang","Zhao","Zhe","Zhen","Zheng","Zhi","Zhong","Zhou","Zhu","Zhua","Zhuai","Zhuan",
- "Zhuang","Zhui","Zhun","Zhuo","Zi","Zong","Zou","Zu","Zuan","Zui","Zun","Zuo"
- };
- //建立一个convertCh方法用于将汉字转换成全拼的拼音,其中,参数代表汉字字符串,此方法的返回值是转换后的拼音字符串
- public static string convertCh(string Chstr)
- {
- Regex reg = new Regex("^[\u4e00-\u9fa5]$");//验证是否输入汉字
- byte[] arr = new byte[];
- string pystr = "";
- int asc = , M1 = , M2 = ;
- char[] mChar = Chstr.ToCharArray();//获取汉字对应的字符数组
- for (int j = ; j < mChar.Length; j++)
- {
- //如果输入的是汉字
- if (reg.IsMatch(mChar[j].ToString()))
- {
- arr = System.Text.Encoding.Default.GetBytes(mChar[j].ToString());
- M1 = (short)(arr[]);
- M2 = (short)(arr[]);
- asc = M1 * + M2 - ;
- if (asc > && asc < )
- {
- pystr += mChar[j];
- }
- else
- {
- switch (asc)
- {
- case -:
- pystr += "Zhen"; break;
- case -:
- pystr += "Qian"; break;
- case -:
- pystr += "Jia"; break;
- case -:
- pystr += "Ge"; break;
- case -:
- pystr += "Ga"; break;
- case -:
- pystr += "La"; break;
- case -:
- pystr += "Chen"; break;
- case -:
- pystr += "Mao"; break;
- case -:
- pystr += "Mao"; break;
- case -:
- pystr += "Die"; break;
- case -:
- pystr += "Tian"; break;
- default:
- for (int i = (getValue.Length - ); i >= ; i--)
- {
- if (getValue[i] <= asc)//判断汉字的拼音区编码是否在指定范围内
- {
- pystr += getName[i];//如果不超出范围则获取对应的拼音
- break;
- }
- }
- break;
- }
- }
- }
- else//如果不是汉字
- {
- pystr += mChar[j].ToString();//如果不是汉字则返回
- }
- }
- return pystr;//返回获取到的汉字拼音
- }
- }
- }
在Program.cs加入以下代码
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Text.RegularExpressions;
- using System.Threading.Tasks;
- namespace npoi
- {
- class Program
- {
- static void Main(string[] args)
- {
- string path = @"C:\Users\Jie\Desktop\data.txt";
- System.Text.Encoding.GetEncoding("gb2312");
- //ReadAllLines 必须设置默认编码,不然读取汉字会乱码
- List<string> list = File.ReadAllLines(path, System.Text.Encoding.Default).ToList();
- List<string> listhz = new List<string>();
- List<string> listzm = new List<string>();
- foreach (string s in list) {
- if (Regex.IsMatch(s, @"^[\u4e00-\u9fa5]+$"))
- {
- listhz.Add(s);
- }
- else {
- listzm.Add(s);
- }
- }
- foreach (string hz in listhz) {
- var hz2py = ChnToPh.convertCh(hz);
- foreach(string zm in listzm)
- {
- if (zm.ToLower() == hz2py.ToLower()) {
- Console.WriteLine(string.Format("{0}:{1}", hz, zm));
- }
- }
- }
- Console.ReadLine();
- }
- }
- }
新建 data.txt 如下
放置对应的目录。运行代码 如图:
C#读出文本文件内容,遍历数组筛选出 含有汉字对应的拼音字符的更多相关文章
- jquery实现对象数组 筛选出每条记录中的特定属性字段 及根据某个属性值筛选出指定的元素
jquery实现对象数组 筛选出每条记录中的特定属性字段 直接上图: 源码: /** * 对后端返回的数据,筛选出符合报表的列项,多余的列项去除 */ function filterParams(da ...
- phpcms抛出的二维数组转移到js,js中for....in遍历数组,用“.”连接来读出一维数组值
直切正题: 1.phpcms在模版中读出数组有很多中方法,如,{pc:content action="lists"}或{pc:get sql=""},经过{lo ...
- jquery遍历数组与筛选数组的方法
grepgrep()方法用于数组元素过滤筛选 grep(array,callback,invert)array:待过滤数组;callback:处理数组中的每个元素,并过滤元素,该函数中包含两个参数,第 ...
- js下拉框:从数组中筛选出匹配的数据
handleChange(val) { let obj = {} // 遍历数组 obj = this.options.find(item => { // 筛选出匹配的数据 return ite ...
- 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.数组插入.删除 ...
- JavaScript for/in 语句 遍历数组内容
for-in遍历 for-in是为遍历对象而设计的,不适用于遍历数组. 遍历数组的缺点:数组的下标index值是数字,for-in遍历的index值"0","1" ...
- C#写入和读出文本文件
C#写入和读出文本文件 写入文本文件 class WriteTextFile { static void Main() { //如果文件不存在,则创建:存在则覆盖 //该方法写入字符数组换行显示 st ...
- 如何从两个List中筛选出相同的值
问题 现有社保卡和身份证若干,想要匹配筛选出一一对应的社保卡和身份证. 转换为List socialList,和List idList,从二者中找出匹配的社保卡. 模型 创建社保卡类 /** * @a ...
- jquery 选择对象随心所欲,遍历数组更是易如反掌
jquery只要研究总结透彻了,那选择对象就会随心所欲,遍历数组更是易如反掌.选对对象,才能“娶妻生子”,才能有后续的数据处理.呵呵遍历对很关键. 怕只怕,学东西浅尝辄止一知半解.本篇特别研究总结jq ...
随机推荐
- 利用Aspose.Cells导出Datatable数据
面对一些的格式各样的到处数据的要求,自学了一点 Aspose.Cells中操作Excel知识,如下代码: /// <summary> /// DataTable导出Excel /// &l ...
- 判断输入的值是否为Double
using System; using System.Collections.Generic; using System.Text; namespace TDRFactory { public cla ...
- angular中的ng-click指令案例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- poj3083 Children of the Candy Corn 深搜+广搜
这道题有深搜和广搜.深搜还有要求,靠左或靠右.下面以靠左为例,可以把简单分为上北,下南,左西,右东四个方向.向东就是横坐标i不变,纵坐标j加1(i与j其实就是下标).其他方向也可以这样确定.通过上一步 ...
- EF Code First连接现有数据库
作为一个初入学习.net MVC4 的新手,想写一写今天碰到的问题,做一个总结. 首先我想利用EF Code First来连接我现有数据库,而不是通过EF Code First来自动生成数据库和表. ...
- Http状态码大全(200、404、500等)
基本涵盖了所有问题 HTTP 400 – 请求无效HTTP 401.1 – 未授权:登录失败HTTP 401.2 – 未授权:服务器配置问题导致登录失败HTTP 401.3 – ACL 禁止访问资源H ...
- Win10怎么批量修改文件后缀名?
Win10怎么批量修改文件后缀名?一般我们都是右击重命名,但是,如果要改的文件很多的话,这样做事不行的,该怎么批量修改后缀名呢?下面我们一起来看看两种解决办法 通常我们修改文件后缀名都是右击>& ...
- Java中类的定义
成员变量:对应事物的属性 成员方法:对应事物的行为 类定义的格式 定义类:就是定义类的成员,包括成员变量和成员方法 成员变量:和以前定义变量几乎是一样的.只不过位置发生了改变.在类中,方法外. 成员方 ...
- MySQL_pymysql模块
安装:pip install pymysql 基本操作 import pymysql conn=pymysql.connect(host=',database='lary',charset='utf8 ...
- mysql 最大连接数
方式一: 一次性修改 服务重启后还原 查看 show variables like 'max_connections%'; 修改 set GLOBAL max_connections=1024; ...