字符串与正则表达式

  • 字符串使用类String(默认值为String.Empty)来表示,小写形式string是C#语言中的数据类型
  • 字符串是Char类型的字符数组
  • 字符串是引用类型,它的值位于堆上
  • 字符串变量一旦赋值,它的值就不再能够改变,因此字符串对象是不变对象
  • 运算符==和!=运算符比较的是string对象的值,而不是引用。实际上是因为String重载了这两个运算符
  • 如果要改变一个字符串的值,因为字符串是不变类型,因此结果都是生成一个新的字符串对象,其值为新的字符串值,指向原字符串变量的指针改为指向新的字符串对象
  • 如果在一个循环中改变字符串值,或者合并多个字符串的值,那么由于每次都会创新新的字符串对象,因此会产生许多临时的中间字符串对象,这十分影响性能和执行效率,并造成资源浪费

为了提高性能和保证执行效率,.Net Framework维护了一个字符串池(暂存池、常量池),用以对使用过的字符串进行缓存。当为字符串类型的变量赋值时,此值同时被放入常量池中,在以后需要创新新的字符串时,CLR会首先检查池中是否存在相同值的字符串对象,如果存在,就将变量指向池中已经存在的对象,那么旧的对象又得以重用了,这个过程称为“字符串驻留”。而常量池缓存字符串对象的原则是:直接出现在代码中的字符串都会被放入“常量池”,而动态创建的字符串对象并不会被放入。可使用string.IsInterned(string)进行测试。

为了某些情况下效率低下的问题,比如在循环中改变字符串的值,可以使用StringBuilder类以提高效率,
将StringBuilder和String类对比,String值的追加操作每次都会分配新的内存,而StringBuilder仅当StringBuilder对象缓冲区太小以至于无法容纳新数据时才分配内存。因此,当字符串追加操作并不多时,最好还是使用String类。但如果需要任意多次追加字符串,例如在一个循环中,使用StringBuilder类比使用String类性能更高。尽管StringBuilder有着诸多好处,但创建一个StringBuilder实例比创建一个String实例需要花费更多的内存资源,因此使用StringBuilder也是要讲场合的。

格式化字符串:
{index[,alignment][:formatString]}
index,参数说明符,从零开始的整数,可标识对象列表中对应的项。如果由参数说明符指定的对象是空引用,则格式项将被字符串“”替换
alignment,可选参数,指示包含格式化值的区域的最小宽度。如果格式化值的长度小于alignment,则用空格填充该区域。如果alignment为负,则格式化的值将在该区域中左对齐;如果alignment为正,则格式化的值将右对齐。如果没有指定alignment,则该区域的长度为格式化值的长度。如果指定alignment,则需使用逗号。
formatString,可选的格式说明符字符串。如果相应对象是数值,则指定“数字格式字符串”,如果相应对象是DateTime对象,则指定“日期和时间格式字符串”,或者如果相应对象是枚举值,则指定“枚举格式字符串”。如果不指定“格式字符串”,则对数字、日期和时间或者枚举类型“使用常规(G)格式说明符”。如果指定“格式说明符”,则需要使用冒号。

如果需要在格式化字符串中使用花括号,必须使用连续两个花括号的形式“{{...}}”

格式数值型数据可以使用“标准数字格式字符串”和自定义数字格式字符串“,”标准数字格式字符串“的格式为”格式说明符+精度说明符“,如”N1“,表示精度为1的数字格式(小数点后1位)

格式字符 说明 格式字符 说明
G/g 常规格式 N/n 数字格式
C/c 货币格式 P/p 百分比格式
D/d 十进制格式 R/r 往返格式
E/e 科学计数(指数)格式 X/x 十六进制格式
F/f 固定点格式

自定义数字格式字符串

格式说明符 说明
0 零占位符
# 数字占位符
.(点号) 小数点
,(逗号) 千位分隔符和数字比例换算
% 百分比点位符
E0、E+0、E-0、e0、e+0、e-0 科学记数法
|转义符
‘ABC’、”ABC“ 字符串
;(分号) 部分分隔符
其他 所有其他字符
Double myDouble = 1234567890;
int myInt = 42;

Console.WriteLine(string.Format(”{0:(###) ### - ####}“, myDouble)); // (123) 456 - 7890
Console.WriteLine(string.Format(”{0:My Number = #“, myInt));  // My Number = 42
”“

正则表达式

这里有一篇写得比较详细的博文,可供参考。

posted @ 2019-06-06 08:54  Allen2015  阅读(1472)  评论(0编辑  收藏  举报