欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

4-C#格式处理

程序员文章站 2022-03-26 08:58:19
本篇博客对应视频讲解 前言 前几篇文章及对应视频是带大家快速体验了一下C#,了解编程语言最基础的内容及面向对象的概念。 接下来我会进一步演示和说明C#还能做些什么。 实际上,C#就一门语言来讲,除去面向对象的概念,以及我们前面讲的内容(类型、数值计算、分支循环等),基本也就差不多了。以下的内容,与其 ......

本篇博客对应视频讲解

前言

前几篇文章及对应视频是带大家快速体验了一下c#,了解编程语言最基础的内容及面向对象的概念。 接下来我会进一步演示和说明c#还能做些什么。

实际上,c#就一门语言来讲,除去面向对象的概念,以及我们前面讲的内容(类型、数值计算、分支循环等),基本也就差不多了。以下的内容,与其说是c#的内容,不如说是.net平台提供的功能。这也就意味着,当你使用其他依赖.net平台的语言时(vb,f#等),你都可以做到相应的操作。

先给大家一个提纲,总览接下来要讲解的内容。

提纲

  1. 格式处理:字符串处理(正则)、时间格式处理、常用类型转换处理
  2. 文件操作:如何创建、读取、删除文件及文件夹等操作。
  3. 编码操作:不同编码之间的转换。
  4. linq查询语言:如何优雅一致的处理一组对象。
  5. 网络请求:http请求,tcp连接,socket
  6. 线程处理:多线程处理
  7. 异步处理:如何方便优雅的使用异步
  8. 序列化处理:包括解析json,xml(html)格式内容
  9. 数据库操作:连接数据库,数据库读写操作

格式处理

现实世界远比我们想象的复杂,不同国家、宗教、人种、民族等等,文化都不尽相同。所以,想要使用程序描述我们的世界也是不容易的。我们从现实中获取的信息,存储到计算机中,就需要转换成计算机可识别的内容。我们需要在人机之中寻找平衡。这就需要类型转换和格式处理。今天我们就来简单说明一下格式处理。

类型转换

在我们的生活中,我们并不会区分什么类型,人与人之间就是通过文字或通话,这些都可以当做"字符串"。 只是不同的词可能表达了不同的含义。在有类型的语言中,为了优化或精准的进行某些计算操作,所以将一些常用的类型进行区分。所以,很多时候,我们需要把人类写的文字或说的话,即字符串,转换成其他的类型,然后再做进一步的处理。

关于类型转换的内容,可以查看。这里只是说明了隐匿转换和显示(强制)转换。

实际上,c#中,不同的类型都对应着不同的类。比如int,string,long,byte,datetime等等,当我们想要进行转换的时候都可以在相应的类中找到相关的方法。

同时我们还有convert类的帮助,以帮助我们进行更多转换的需求。这些内容可通过以下链接,或通过我们的教学视频中的演示去学习。

示例代码:

int a = 13;
double b = 2.13;

//显示转化
var b1 = (int)b;
//判断类型
if (b1 is int)
{
	console.writeline("(int)b的类型为:" + b1.gettype().name + ",值为:" + b1);
}
else
{
	console.writeline($"{b}=>{b1}");
}

//字符串转数字 
console.writeline(int.parse("14"));
console.writeline(double.parse("13.5"));

//使用convert类
console.writeline(convert.toint32("14"));
console.writeline(convert.todouble("13.5"));

字符串处理

关于字符串相关的内容,可参考。我在此没必要一一列举,我在视频中会通过一些示例进行讲解。 在我们看文档及视频时,尝试理解以下知识点:

  1. 字符串对象的不可变性
  2. 转义字符的使用。
  3. 使用format格式化字符串.
  4. 使用下标方式访问字符串的某个字符。即字符串可当做字符数组来使用。
  5. stringbuilder的作用。

net 中的字符串操作进行了高度的优化,在大多数情况下不会显著影响性能。 但是,在某些情况下(例如,执行数百次或数千次的紧密循环),字符串操作可能影响性能。 stringbuilder 类创建字符串缓冲区,用于在程序执行多个字符串操控时提升性能。 使用 stringbuilder 字符串,还可以重新分配各个字符,而内置字符串数据类型则不支持这样做。 6. 正则匹配搜索。 经常用来判断格式(手机、身份证号、邮箱等)是否正确,以及匹配特定的内容。

相关的代码示例:

           //字符串转义文档: https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/strings/#string-escape-sequences
            string output = "hello niltor,\nwelcome to msdev.cc!\n\tthank you!";
            console.writeline(output);
            output = "\"类\"的概念";
            console.writeline(output);

            console.writeline("我的名字是{0}", "niltor");
            output = string.format("你好,{0}", "niltor");
            console.writeline(output);

            //字符串当做字符数组使用
            output = "零一二三四五";
            for (int i = 0; i < output.length; i++)
            {
                console.writeline(string.concat(i, ":", output[i]));
            }

            //更加灵活的字符串处理 stringbuilder
            // 文档链接:https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/strings/#using-stringbuilder-for-fast-string-creation
            var sb = new stringbuilder("miltor");
            //output[0] = "佰";  //只读不可更改
            sb[0] = 'n';
            sb.append(". nice to meet you");
            sb.insert(0, "hello ");
            console.writeline(sb.tostring());

            //正则匹配
            //文档链接:https://docs.microsoft.com/zh-cn/dotnet/standard/base-types/regular-expression-language-quick-reference
            //1 判断格式
            string phone = "13890902211";
            string pattern = @"\d{11}";
            if (regex.ismatch(phone, pattern))
            {
                console.writeline($"{phone} 符合手机格式");
            }
            else
            {
                console.writeline($"{phone} 格式错误");
            }
            //2 匹配特定内容
            string sites = "我们官方网站的网址是:https://msdev.cc,欢迎访问";
            // 分组匹配
            pattern = @"://(?<websites>\w+\.\w+),";
            // 匹配
            var match = regex.match(sites, pattern);
            // 输出匹配的内容
            console.writeline(match.groups["websites"].value);

时间格式处理

在现实生活中,我们对日期时间基本是不需要什么思考的,因为我们通常只识别一两种我们常用的时间格式,但在计算机中,由于世界各地不同语言下,时间的表示都不一样,就有很多内容可讲了。

  1. 日期时间的表达方式及常用方法 datetime api timespan api

相关的代码示例:

//日期格式处理
            //创建时间
            var datetime = datetime.now;//当前日期
            console.writeline("当前时间:" + datetime.tostring());

            //字符串转化到日期
            //标准格式的转化
            string date = "2017/11/12";
            console.writeline(datetime.parse(date).tostring());

            date = "2017-12-12 13:22:20";
            console.writeline(datetime.parse(date).tostring());

            //自定义格式转化
            date = "12月20号,下午3点";
            console.writeline(datetime.parseexact(date, "mm月dd号,tth点", cultureinfo.createspecificculture("zh-cn")));

            //日期计算
            //三年前的今天是星期几?
            datetime = datetime.addyears(-3);
            console.writeline("三年前的今天是:" + datetime.dayofweek);
            //ddd:周几  dddd:星期几
            console.writeline("三年前的今天是:" + datetime.tostring("dddd"));

以上内容有很多,实际上我们最常用的,大家只需要记住datetime类就可以了。而在有其他需求的时候,就可以去查阅相关的文档即可。