zoukankan      html  css  js  c++  java
  • 字符串与正则表达式

    • 字符串使用类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
    ”“
    

    正则表达式

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

  • 相关阅读:
    Web测试与App测试的区别
    unittest参数化
    算法-python
    冒泡排序算法-python
    mysql基础知识
    Web自动化-浏览器驱动chromedriver安装方法
    Selenium-三种等待方式
    C++中进制转换问题
    C++11新特性,对象移动,右值引用,移动构造函数
    C++ 拷贝控制和资源管理,智能指针的简单实现
  • 原文地址:https://www.cnblogs.com/home-wang/p/10971414.html
Copyright © 2011-2022 走看看