介绍
随着.net core
越来越流行,对.net core
基础知识的了解,实际应用等相关的知识也应该有所了解。所以就有了这篇文章,案例都是来自阅读的书籍,或者实际工作中感觉比较有用的应用。分享亦总结。
本文主要介绍 .net core
相关的字符串处理案例。
具体案例
处理超大整数
【导语】
在常用的整数类型中,容量最大的是 64 位整数。但是,在一些特定的应用场景中,应用程序需要存储的整数值会远远超过 64 位整数的最大值(例如,两个 64 位相乘)。这时候,就需要用到超大数据类型———— BigInterger
(位于 System.Numerics
命名空间)。
BigInterger
类型的整数没有限制最大值和最小值,也就是说,理论上它是可以存储无限大的整数。然而受到计算机内存的限制,很难真正做到“无限制大”。当 BigInterger
耗尽可用内存时,就会抛出 OutOfMemoryException
异常。
本实例将使用 BigInterger
实例来存放整数 300 的阶乘运算结果,因为其结果远远超过 64 位整数的容量,只能使用 BigInterger
类型存储。
【操作流程】
步骤1:新建控制台应用程序项目。
步骤2:计算 300 的阶乘,使用 BigInterger
对象来保存结果。
int n = 300;
BigInteger bi = 1;
int temp = n;
while(temp > 0)
{
bi *= temp;
temp--;
}
步骤3:将计算结果输出。
Console.WriteLine("{0} 的阶乘:\n{1}", n, bi);
步骤4:运行应用程序项目,如下所示。
获取指定日期的农历日期
【导语】
农历是中国传统历法,属于阴阳历(并非纯阴历),用月相(朔望月)确定每月周期,并依据太阳历(回归历)设置二十四节气。平年位十二个月,闰年位十三个月,大约三十天,小月二十九天(朔望月平均长度位 29.530588 天)。
为了方便获取与农历相关的信息,在 System.Globalization
命名空间下,提供了一个专门用于计算中国农历的 ChineseLunisolarCalendar
类,该类从 EastAsianLunisolarCalendar
类派生(因为东亚国家的历法与农历有相似之处,例如表示日本历法的 JapaneseCalendar
类)。
要获取指定日期在农历中的日期,可用分别调用 GetMonth
和 GetDayOfMonth
两个方法,两个方法均返回 int
数值。
【操作流程】
步骤1:新建控制台应用程序项目。
步骤2:引入命名空间。
using System.Globalization;
步骤3:实例化 ChineseLunisolarCalendar
对象。
ChineseLunisolarCalendar cncld = new ChineseLunisolarCalendar();
步骤4:定义三个使用公历表示的日期,用于稍后测试。
DateTime d1 = new DateTime(2017, 12, 30);
DateTime d2 = new DateTime(2018, 3, 20);
DateTime d3 = new DateTime(2018, 5, 15);
步骤5:获取以上三个日期的农历日期(包括月和日)。
Console.WriteLine($"{d1:d},农历:{cncld.GetMonth(d1)} 月 {cncld.GetDayOfMonth(d1)} 日");
Console.WriteLine($"{d2:d},农历:{cncld.GetMonth(d2)} 月 {cncld.GetDayOfMonth(d2)} ");
Console.WriteLine($"{d3:d},农历:{cncld.GetMonth(d3)} 月 {cncld.GetDayOfMonth(d3)} ");
步骤6:运行应用程序项目,如下所示。
由于2017年存在闰六月(数值为7),因此,农历12月13日,实际为11月13日。
输出百分比
【导语】
百分比的格式控制符为“P”或“p”,使用该格式控制符,可用将普通数值输出为百分比形式,也就是将原数值乘以 100 后并在后面接上“%”符合。
在格式控制符后面紧跟一个整数,可用指定要保留的小数位数。例如,“P3”表示将原数值输出为百分比形式,并保留 3 位小数。
举个例子,浮点数 0.0003,使用“P3”格式控制符后,输出的字符串位“0.30%”。
【操作流程】
步骤1:新建控制台应用程序项目。
步骤2:声明并初始化一个单精度浮点数值。
float val = 0.1785f;
步骤3:使用“P”格式控制符输出以上数值的百分比形式,默认情况下,“P”格式控制符将保留 2 位小数。
Console.WriteLine($"{"p",-15}{val,-10:p}");
步骤4:使用“P”格式控制符输出百分比形式,而且保留 3 位小数。
Console.WriteLine($"{"p3",-15}{val,-10:p3}");
步骤5:按 F5
快捷键运行应用程序项目,结果如下。
输出多个币种格式
【导语】
许多数值类型(如double
、decimal
等)都公开一个特殊的ToString
方法重载。
string ToString(string format, IFormatProvider provider)
format
参数指定格式控制符,provider
是一个接口,其中一个实现类是位于 System.Globalization
命名空间下的 CultureInfo
。CultureInfo
类封装了与各地区的语言与文化信息相关的数据。
获取 CultureInfo
实例有多种方法例如可用 通过调用构造函数进行实例化,并向构造函数传递区域/语言名称或表示 ID;还可以通过 GetCultureInfo
、GetCultureInfoByIetfLanguageTag
等静态方法来直接获取 CultureInfo
实例。
除了 ToString
方法,还可以使用 String
类的 Format
方法、StringBuilder
类的 AppendFormat
方法来输出由 IFomatProvider
修饰的格式化字符串。
本实例将演示 ToString
方法结果 CultureInfo
来输出不同货币的文本表示形式。
【操作流程】
步骤1:新建控制台应用程序项目。
步骤2:声明一个变量并赋一个十进制数值,用于稍后做测试。
decimal val = 3960.12M;
步骤3:获取 6 个 CultureInfo
实例,分别表示中国大陆、中国台湾、美国、中国香港、中国澳门和日本。
CultureInfo cn = CultureInfo.GetCultureInfoByIetfLanguageTag("zh-CN");
CultureInfo tw = CultureInfo.GetCultureInfoByIetfLanguageTag("zh-TW");
CultureInfo us = CultureInfo.GetCultureInfoByIetfLanguageTag("en-US");
CultureInfo mo = CultureInfo.GetCultureInfoByIetfLanguageTag("zh-MO");
CultureInfo hk = CultureInfo.GetCultureInfoByIetfLanguageTag("zh-HK");
CultureInfo jp = CultureInfo.GetCultureInfoByIetfLanguageTag("ja-JP");
步骤4:根据上面获取的 6 个区域信息,输出不同的货币格式。
Console.WriteLine("原数值:{0}\n", val);
Console.WriteLine("人民币:{0}", val.ToString("C", cn));
Console.WriteLine("台币:{0}", val.ToString("C", tw));
Console.WriteLine("美元:{0}", val.ToString("C", us));
Console.WriteLine("澳元:{0}", val.ToString("C", mo));
Console.WriteLine("港币:{0}", val.ToString("C", hk));
Console.WriteLine("日元:{0}", val.ToString("C", jp));
步骤5:运行应用程序项目,结果如下。
数字的两种常用格式
【导语】
数字一般有两种表示格式:一种是直接表示(格式控制符位 G),例如 123352645.5666
;还有一种也比较常见,即每隔 3 位就用一个英文的逗号标注(格式控制符位 N),例如12,324,32.32
。
【操作流程】
步骤1:新建控制台应用程序项目。
步骤2:声明一个 decimal
变量并赋值。
decimal d = 8582113.76352M;
“M”是一个类型后缀,在数值后面加上“M”或“m”,表示一个 decimal
类型的数值,就像可以在双精度数值后面加上“d”一样。
步骤3:分别以“G”和“N”格式输出数值的字符串形式。
Console.WriteLine("{0,-15}{1,-20:G}", "G",d);
Console.WriteLine("{0,-15}{1,-20:N}", "N", d);
在 Console.WriteLine
方法或者 String.Format
方法种,格式占位符用一对大括号括着的整数值表示,从 0 开始计算。在格式占位符中,以逗号(英文)开头表示被格式化文本的对齐方式,整数值表示右对齐,负数值表示左对齐,数字表示所占用的字符数,如果格式化输出的内容小于该长度,则用空格填充剩余空间,以冒号(英文)开头表示要使用的格式控制符,例如本例中用的“G”和“N”。
步骤4:按下快捷键 F5
运行应用程序项目,结果如下。
自定义小数位数
【导语】
【操作流程】
“#”与“0”格式控制符的作用相同,都是用来自定义数字格式的。但是两个格式控制符之间略有不同。
“#”仅填充有效位,如果某数位上是 0 并且不是必须的,那么就会别忽略。例如0.2,使用“#.##”格式控制符后就会输出“.2”,整数部分的 0 会被忽略,小数部分虽然由 2 位,但只有“2”才是有效位。
同样以0.2为例,对于“0”格式控制符,“0.00”就会输出“0.20”。因为“0”格式控制符对与非有效位都用“0”来填充。
步骤1:新建控制台应用程序项目。
步骤2:声明一个 double
类型的变量并进行赋值。
double d = 572.562170932d;
步骤3:将上面变量的值转为字符串输出,分别保留 5 位小数、3 位小数、1 位小数,以及仅保留整数位。
Console.WriteLine("保留 5 位小数:{0}", d.ToString("0.00000"));
Console.WriteLine("保留 3 位小数:{0}", d.ToString("0.000"));
Console.WriteLine("保留 1 位小数:{0}", d.ToString("0.0"));
Console.WriteLine("保留整数:{0}", d.ToString("#"));
步骤4:按下快捷键 F5
运行应用程序项目,结果如下。
总结
本文到这里就结束了,下一篇将介绍泛型和集合的知识案例。