(一)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相关的类。

【读书笔记】C#高级编程 第九章 字符串和正则表达式的更多相关文章

  1. C#高级编程9-第9章 字符串和正则表达式

    字符串和正则表达式 String类 String类对象是不可改变的,对于String对象的重新赋值在本质上是重新创建了一个String对象并将新值赋予该对象,其方法ToString对性能的提高并非很显 ...

  2. R in action读书笔记(12)第九章 方差分析

    第九章方差分析 9.2 ANOVA 模型拟合 9.2.1 aov()函数 aov(formula, data = NULL, projections =FALSE, qr = TRUE, contra ...

  3. 读书笔记 - javascript 高级程序设计 - 第一章 简介

      第一章 简介   诞生时间 1995 最初用途 客服端验证 第一版标准 注意是标准 1997年 Ecma-262  一个完整的js实现由三部分组成 ECMAScript DOM 文档对象模型 BO ...

  4. 读书笔记 - javascript 高级程序设计 - 第二章 在Html中使用JavaScript

    1 <script>的6个属性 async  立即下载当前script标签的外部脚本 但不能影响别的 charset 没用了 defer  文档显示之后再执行脚本,只对外部脚本有效 lan ...

  5. 读书笔记 - js高级程序设计 - 第十五章 使用Canvas绘图

    读书笔记 - js高级程序设计 - 第十三章 事件   canvas 具备绘图能力的2D上下文 及文本API 很多浏览器对WebGL的3D上下文支持还不够好   有时候即使浏览器支持,操作系统如果缺缺 ...

  6. Hadoop学习笔记(7) ——高级编程

    Hadoop学习笔记(7) ——高级编程 从前面的学习中,我们了解到了MapReduce整个过程需要经过以下几个步骤: 1.输入(input):将输入数据分成一个个split,并将split进一步拆成 ...

  7. C# 6 与 .NET Core 1.0 高级编程 - 37 章 ADO.NET

    译文,个人原创,转载请注明出处,有不对的地方欢迎指出与交流. 英文原文:Professional C# 6 and .NET Core 1.0 - 37 ADO.NET --------------- ...

  8. C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(上)

    译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(上)),不对的地方欢迎指出与交流. 章节出自<Professional C# 6 ...

  9. C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(下)

    译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(下)),不对的地方欢迎指出与交流. 章节出自<Professional C# 6 ...

随机推荐

  1. js烧脑面试题大赏

    本文精选了20多道具有一定迷惑性的js题,主要考察的是类型判断.作用域.this指向.原型.事件循环等知识点,每道题都配有笔者详细傻瓜式的解析,偏向于初学者,大佬请随意. 第1题 let a = 1 ...

  2. MySQL数据检索时,sql查询的结果如何加上序号

    1.sql语法 @i:类型java定义的变量 @i:=0:这里类似给i初始化值为0 @i:=@i+1 :每次从0开始递增+1 SELECT (@i:=@i+1) as id,TDLINE FROM Y ...

  3. NC15163 逆序数

    NC15163 逆序数 题目 题目描述 在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序.一个排列中逆序的总数就称为这个排列的逆序数.比如一个序列为 \ ...

  4. shell脚本处理二进制数据

    正确处理二进制数据 正确处理二进制数据必须保证以下三个环节是二进制安全(Binary Safe)的: 从文件读取至内存: 处理数据过程中: 内存写入至文件. 那么二进制安全是什么?通俗来说就是不会特殊 ...

  5. mobaxterm会话同步

    前言 之前用过MobaXterm,想不起来为啥不用了.后面主要还是用xshell,最近又在用WindTerm,WindTerm还不错,奈何有不少的Bug,所以又来研究一下MobaXterm 下午摸索了 ...

  6. linux新建分区和磁盘

    1.查看已有分区 ]# df –hl fdisk -l 查看磁盘情况 ]# fdisk –l 2.对未分区的进行分区 # fdisk /dev/vdb 硬盘分区 创建了一个55G的分区磁盘 1.新建第 ...

  7. 基于NoCode构建简历编辑器

    基于NoCode构建简历编辑器 基于NoCode构建简历编辑器,要参加秋招了,因为各种模版用起来细节上并不是很满意,所以尝试做个简单的拖拽简历编辑器. 描述 Github | Resume DEMO ...

  8. 【PMP学习笔记】第1章 PMP体系引论

    一.什么是项目? 项目是为创造独特的产品.服务或成果而进行的临时性工作. 项目管理是把事办成的方法论,万物皆可项目. 项目的特性 临时性:有明确的"起"和"止" ...

  9. Modbus转BACnet IP网关

    BACnet是楼宇自动化和控制网络数据通信协议的缩写.它是为楼宇自动化网络开发的数据通信协议   根据1999年底互联网上楼宇自动化网络的信息,全球已有数百家国际知名制造商支持BACnet,包括楼宇自 ...

  10. Bika LIMS 开源LIMS集—— SENAITE的使用(检测流程)

    客户管理 登记客户信息,包括地址.合同报告邮寄地址.账单邮寄地址.付款银行账号等. 产品批次管理 例如某乳品公司生产处一批产品,该批产品送往实验室检测,实验室登记该批产品批号,如对该批产品做多次检测, ...