字符串与正则表达式
Posted home-wang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串与正则表达式相关的知识,希望对你有一定的参考价值。
- 字符串使用类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
”“
正则表达式
这里有一篇写得比较详细的博文,可供参考。
以上是关于字符串与正则表达式的主要内容,如果未能解决你的问题,请参考以下文章