【C#冷知识系列】(三)关于字符串的冷知识
stringi="sss\ssss";
模板字符串
stringi=@"sss\ssss";
输出:
sss"ssss
sss\ssss
stringj=$"iis{i}";
//那么i的值就会被插入到字符串中。
这里不仅要知道可以这么用,更要知道为什么可以这么用:模板字符串或者叫插值字符串只是String.Format的一个语法糖,编译器会这样解析:
strings1="Hello";
strings2=String.Format("Hello,{0}",s1);
注意:
如果想输出花括号,就写两个大括号
strings1="Hello";
String类操作字符串的返回值
Console.WriteLine($"{{s1}}");//输出{s1}
Console.WriteLine($"{{{s1}}}");//输出{Hello}
返回值一定是一个新的字符串,因为String类没有提供任何可以改变其内容的方法
//这个知识告诉我们在C#中任何字符串的操作,要获得返回值都需要使用新的字符串进行接收的操作
StringBuilder
stringi="123";
stringj=i.Insert(0,"hello");
输出:
i123
jhello123
我们都知道在进行复杂的字符串操作的时候就要用到StringBuilder类,我们不太注意到的是:
StringBuilder工作方式高效但是功能受限,它只能完成文本中的 替换 追加 删除的工作。
下面是StringBuilder提供的主要方法:
我们应该尽可能的在初始化的时候把容量设置为可能的最大长度以保证不需要重新分配内存,可以提高效率。下面是使用容量初始化StringBuilder的例子:
//下面三个初始化都可以初始化一个StringBuilder
字符串格式化
//按照容量
StringBuildersb=newStringBuilder(20);
//使用字符串初始化
StringBuildersb1=newStringBuilder("Hello");
//使用字符串初始化同时指定容量
StringBuildersb2=newStringBuilder("Hello",20);
格式化的语法
在模板字符串中要用冒号分割变量与格式化字符串
vartime=DateTime.Now;
Console.WriteLine($"{time:D}");//2018年12月5日
Console.WriteLine(time.ToString("D"));//2018年12月5日
内置的格式化
//d:6/15/2008
//D:Sunday,June15,2008
//f:Sunday,June15,20089:15PM
//F:Sunday,June15,20089:15:07PM
//g:6/15/20089:15PM
//G:6/15/20089:15:07PM
//m:June15
//o:2008-06-15T21:15:07.0000000
//R:Sun,15Jun200821:15:07GMT
//s:2008-06-15T21:15:07
//t:9:15PM
//T:9:15:07PM
//u:2008-06-1521:15:07Z
//U:Monday,June16,20084:15:07AM
//y:June,2008
//
//'h:mm:ss.fft':9:15:07.00P
//'dMMMyyyy':15Jun2008
//'HH:mm:ss.f':21:15:07.0
//'ddMMMHH:mm:ss':15Jun21:15:07
//'\Mon\t\h\:M':Month:6
//'HH:mm:ss.ffffzzz':21:15:07.0000-07:00
关于内置的格式化,如果大量经常使用的话,推荐点击这里下载微软提供的工具来帮助格式化。
日期的格式化
数字的格式化(格式化字符串不区分大小写)
自定义格式化
除了使用内置的格式化,我们还能自定义格式化字符串和格式化的结果,方法就是实现IFormattable接口,下面举个例子
定义:
publicclassStudent:IFormattable
{
publicstringFirstName{get;set;}
publicstringLastName{get;set;}
publicoverridestringToString()
{
returnFirstName+""+LastName;
}
publicstringToString(stringformat)=>ToString(format,null);
publicstringToString(stringformat,IFormatProviderformatProvider)
{
switch(format)
{
case"A":
returnToString();
case"F":
returnFirstName;
case"L":
returnLastName;
default:
thrownewFormatException($"invaildformatstring{format}");
}
}
}
使用:
Studentstu=newStudent{FirstName="First",LastName="Last"};
Console.WriteLine(stu.ToString("F"));//输出First
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。