【读书笔记】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相关的类。
【读书笔记】C#高级编程 第九章 字符串和正则表达式的更多相关文章
- C#高级编程9-第9章 字符串和正则表达式
字符串和正则表达式 String类 String类对象是不可改变的,对于String对象的重新赋值在本质上是重新创建了一个String对象并将新值赋予该对象,其方法ToString对性能的提高并非很显 ...
- R in action读书笔记(12)第九章 方差分析
第九章方差分析 9.2 ANOVA 模型拟合 9.2.1 aov()函数 aov(formula, data = NULL, projections =FALSE, qr = TRUE, contra ...
- 读书笔记 - javascript 高级程序设计 - 第一章 简介
第一章 简介 诞生时间 1995 最初用途 客服端验证 第一版标准 注意是标准 1997年 Ecma-262 一个完整的js实现由三部分组成 ECMAScript DOM 文档对象模型 BO ...
- 读书笔记 - javascript 高级程序设计 - 第二章 在Html中使用JavaScript
1 <script>的6个属性 async 立即下载当前script标签的外部脚本 但不能影响别的 charset 没用了 defer 文档显示之后再执行脚本,只对外部脚本有效 lan ...
- 读书笔记 - js高级程序设计 - 第十五章 使用Canvas绘图
读书笔记 - js高级程序设计 - 第十三章 事件 canvas 具备绘图能力的2D上下文 及文本API 很多浏览器对WebGL的3D上下文支持还不够好 有时候即使浏览器支持,操作系统如果缺缺 ...
- Hadoop学习笔记(7) ——高级编程
Hadoop学习笔记(7) ——高级编程 从前面的学习中,我们了解到了MapReduce整个过程需要经过以下几个步骤: 1.输入(input):将输入数据分成一个个split,并将split进一步拆成 ...
- C# 6 与 .NET Core 1.0 高级编程 - 37 章 ADO.NET
译文,个人原创,转载请注明出处,有不对的地方欢迎指出与交流. 英文原文:Professional C# 6 and .NET Core 1.0 - 37 ADO.NET --------------- ...
- C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(上)
译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(上)),不对的地方欢迎指出与交流. 章节出自<Professional C# 6 ...
- C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(下)
译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(下)),不对的地方欢迎指出与交流. 章节出自<Professional C# 6 ...
随机推荐
- Linux定时任务--Crond使用教程
Linux定时任务--Crond使用教程 1. 介绍Crond crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后 ...
- RPA供应链管制单修改机器人
背景:供应链环节中,研发物料时而因为市场缺货等原因无法采购,资材部需登入系统修改物料管制单. 操作流程:登录PDM系统中读取数据.登录ERP系统中更新数据. 人工操作:每日耗时3.5小时,出现一定比例 ...
- exe4j下载和使用
https://blog.csdn.net/weixin_44678104/article/details/101015065
- NC20861 兔子的逆序对
NC20861 兔子的逆序对 题目 题目描述 兔子最近喜欢上了逆序对.一个逆序对 \((i,j)\) 需要满足 \(i < j\) 且 \(a_i > a_j\) .兔子觉得只是求一个序列 ...
- 爬虫(6) - 网页数据解析(2) | BeautifulSoup4在爬虫中的使用
什么是Beautiful Soup库 Beautiful Soup提供一些简单的.python式的函数用来处理导航.搜索.修改分析树等功能 它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简 ...
- .NET ORM框架HiSql实战-第三章-使用自定义编号生成【申请编号】
一.引言 上一篇.NET ORM框架HiSql实战-第二章-使用Hisql实现菜单管理(增删改查) 中菜单编号采用的是雪花ID,生成的编号无法自定义.比如本系统的一个申请业务,需要按前缀+日期+流水号 ...
- 集合-list常用方法总结
每个方法使用见下方代码详解 点击查看代码 ArrayList list = new ArrayList(); list.add("AA"); list.add(123); list ...
- 构建 API 的7个建议【翻译】
迄今为止,越来越多的企业依靠API来为客户提供服务,以确保竞争的优势和业务可见性.出现这个情况的原因是微服务和无服务器架构正变得越来越普遍,API作为其中的关键节点,继承和承载了更多业务. 在这个前提 ...
- 【每天学一点-06】在Vue中使用Vant-Picker选择器,并且给选择器添加一个类似Antd-Select-showSearch的搜索功能
一.在Vant文档中,Picker组件的API中是没有showSearch这一选项的 1.Vant-Picker 文档 2.Antd-Select 文档 3.需要完成的需求 4.因为在H5项目中出现了 ...
- ElementUI嵌套页面及关联增删查改实现
@ 目录 前言 一.ElementUI如何在原有页面添加另外一个页面并实现关联增删查改? 二.实现步骤 1.ElementUI代码 2.思路:很简单 1.1 首先通过el-row.el-col.el- ...