(一)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. sql-sql优化

    SQL执行流程 a. 编写过程: select dinstinct .. from .. join .. on .. where .. group by .. having .. order by . ...

  2. 「BUAA OO Unit 4 HW16」第四单元总结与课程回顾

    「BUAA OO Unit 4 HW16」第四单元总结与课程回顾 目录 「BUAA OO Unit 4 HW16」第四单元总结与课程回顾 Part 0 第四单元作业架构设计 架构设计概要 AppRun ...

  3. 上传几张.NET5之后的机器人logo

    上传几张.NET5之后的机器人logo

  4. 意想不到的Python ttkbootstrap 制作账户注册信息界面

    嗨害大家好,我是小熊猫 今天给大家来整一个旧活~ 前言 ttkbootstrap 是一个基于 tkinter 的界面美化库,使用这个工具可以开发出类似前端 bootstrap 风格的tkinter 桌 ...

  5. TCP/IP协议三次握手、四次断开

    1.tcp报文格式 1行代表一个字节: 第一行:代表源端口和目的端口,分别占16位: 第二行:32位序列号:表示客户端向服务端发送的报文的序号是多少,这个序号是计算机随机生成的一个代表该报文的唯一标示 ...

  6. Go语言基础六:结构体和方法

    结构体 结构体是一个由用户定义的复合类型,它由一系列属性组成,每个属性都有自己的类型和值.Go语言中数组可以存储同一类型的数据,但在结构体中用户可以为不同项定义不同(或相同)的数据类型.结构体是值类型 ...

  7. python zip、*、**理解

    zip函数 zip()一般传入可迭代对象(不止一个),将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的zip对象(python2返回元组),需要手动使用tuple.list等序列转换成可使 ...

  8. Java开发学习(二十二)----Spring事务属性、事务传播行为

    一.事务配置 上面这些属性都可以在@Transactional注解的参数上进行设置. readOnly:true只读事务,false读写事务,增删改要设为false,查询设为true. timeout ...

  9. MySQL 启停过程了解一二

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. GreatSQL是MySQL的国产分支版本,使用上与MySQL一致. 前言 你知道MySQL启停都做了些什么吗? 启动的时 ...

  10. ApacheCon 2020 参会指南

    每年一度的 Apache 北美大会因为疫情的原因转到线上来举行了, 这次会议的主题是 ApacheCon@Home, 也就是说借助网络我们可以足不出户就可以参加 Apache 大会了.今年的会议为了针 ...