.net core精彩实例分享 -- 字符串处理

介绍

随着.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 类)。

要获取指定日期在农历中的日期,可用分别调用 GetMonthGetDayOfMonth 两个方法,两个方法均返回 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 快捷键运行应用程序项目,结果如下。

在这里插入图片描述

输出多个币种格式

【导语】

许多数值类型(如doubledecimal等)都公开一个特殊的ToString方法重载。

string ToString(string format, IFormatProvider provider)

format 参数指定格式控制符,provider 是一个接口,其中一个实现类是位于 System.Globalization 命名空间下的 CultureInfoCultureInfo 类封装了与各地区的语言与文化信息相关的数据。

获取 CultureInfo 实例有多种方法例如可用 通过调用构造函数进行实例化,并向构造函数传递区域/语言名称或表示 ID;还可以通过 GetCultureInfoGetCultureInfoByIetfLanguageTag 等静态方法来直接获取 CultureInfo 实例。

除了 ToString 方法,还可以使用 String 类的 Format 方法、StringBuilder 类的 AppendFormat 方法来输出由 IFomatProvider 修饰的格式化字符串。

本实例将演示 ToString 方法结果 CultureInfo 来输出不同货币的文本表示形式。

【操作流程】

步骤1:新建控制台应用程序项目。

步骤2:声明一个变量并赋一个十进制数值,用于稍后做测试。

decimal val = 3960.12M;

步骤3:获取 6CultureInfo 实例,分别表示中国大陆、中国台湾、美国、中国香港、中国澳门和日本。

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 运行应用程序项目,结果如下。

在这里插入图片描述

总结

本文到这里就结束了,下一篇将介绍泛型和集合的知识案例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值