• 【读书笔记】C#高级编程 第九章 字符串和正则表达式


    (一)System.String类

    System.String是一个类,专门用于存储字符串,允许对字符串进行许多操作。C#提供了关键字string和相关的语法,以便使用这个类更轻松。

    例子:

    使用运算符重载可以连接字符串:

    string message1 = "hello";
    
    message1 += " world";
    
    Console.WriteLine(message1);

    运行以上代码,结果如下:

     

    例子:

    C#还允许使用类似于索引器的语法来提取字符:

    string message1 = "hello";
    
    char char1 = message1[0];
    
    Console.WriteLine(char1);

    运行以上代码,结果如下:

     

    System.String类的还有许多其它方法。

    1、创建字符串

    String类存在一个问题:重复修改给定的字符串,效率会很低,它实际上是一个不可变的数据类型,一旦对字符串对象进行了初始化,该字符串对象就不能改变了。

    例子:

    string message1 = "hello";
    
    message1 = "hello world";

    表面上message1修改了字符串的内容,实际上是创建了一个新的字符串hello world然后将其指向meesage1,原来的hello字符串就没有变量引用它,下一次垃圾收集器清理时就会删除它。

    2、StringBuilder成员

    实例化StringBuilder时有很多重载可以选择,其中就有提供一个字符串和给定容量。

    例子:

    StringBuilder strb1 = new StringBuilder("hello");
    
    StringBuilder strb2 = new StringBuilder(100);

    还可以随时显示地设置容量,当字符串长度超出时,就会抛出异常:

    StringBuilder strb = new StringBuilder("1个字符");
    
    strb.Capacity = 1;

     运行以上代码,结果如下:

     

    StringBuilder类上可以进行的处理仅限于替换和追加或删除字符串中的文本。StringBuilder转换为string的唯一方法就是使用ToString()方法。StringBuilder类基本上应在处理多个字符串时使用。

    3、格式字符串

    例子:

    Console.WriteLine("张三有存款:{0,10:C}",1000);
    
    Console.WriteLine("李四有存款:{0,10:C}", 800);
    
    Console.WriteLine("赵六有存款:{0,10:C}", 20000);

    运行以上代码,结果如下:

     

    解释一下{0,10:C}的作用,其中{0}是占位符,逗号后的数字是表示该项字符串要占用的字符宽度,冒号后面的字母是格式说明符。在使用格式说明符时,会检查占位符替换内容的类型是否实现IFormattable接口,如果没有则调用对象的ToString()方法。

    例子:

    在自定义类中实现IFormattable

     1 class Program
     2 {
     3     static void Main(string[] args)
     4     {
     5         Person p = new Person();
     6         p.FirstName = "zhang";
     7         p.SecondName = "san";
     8         Console.WriteLine("无格式说明符:{0}", p);
     9         Console.WriteLine("格式说明符C:{0:C}", p);
    10         Console.WriteLine("格式说明符A:{0:A}", p);
    11     }
    12 
    13 }
    14 public class Person : IFormattable
    15 {
    16     public string FirstName { get; set; }
    17     public string SecondName { get; set; }
    18     public string ToString(string format, IFormatProvider formatProvider)
    19     {
    20         //当没有传入格式说明符时,直接调用ToString()
    21         if (format == null)
    22         {
    23             return ToString();
    24         }
    25         //C表示返回中国格式名字  A表示返回美国格式名字
    26         switch (format.ToUpper())
    27         {
    28             case "C":
    29                 return FirstName + SecondName;
    30             case "A":
    31                 return SecondName + FirstName;
    32             default:
    33                 return ToString();
    34         }
    35     }
    36 }

    运行以上代码,结果如下:

     

     

    (二)正则表达式

    .NET正则表达式引擎用于兼容Perl 5 的正则表达式。

    1、正则表达式概述

    正则表达式是一种专门用于字符串处理的语言。

    2、.NET正则表达式的使用

    例子:

    MatchCollection match = Regex.Matches("happy hapy hay", "ha.+?y");
    
    foreach (Match item in match)
    
    {
    
        Console.WriteLine("{0}位置,匹配到{1}", item.Index, item.Value);
    
     
    
    }
    
    Console.ReadKey();

    运行以上代码,结果如下:

     

    关于正则表达式的内容另行了解,.NET中主要是Regex相关的类。

  • 相关阅读:
    ACM XXX1
    最大公约数算法
    struct和typedef struct
    PKU 1012
    素数算法3种
    ZOJ 1088
    学习ios开发计划书
    iphone系统架构以及各层提供的主要服务
    iOS 界面元素尺寸
    开发手机版网站有哪些前端框架?
  • 原文地址:https://www.cnblogs.com/dlxh/p/6649481.html
Copyright © 2020-2023  润新知