一、大文件读取方式
1.FileStream文件流(操作字节可以读取各种文件信息)
(1)FileStream文件流和File的区别
File在读取文件的时候是一次性读取所有的文件信息,而FileStream是以文件流的形式一点点去读取文件的信息
(2)使用FileStream读取文件
(3)使用FileStream写入文件信息
2.StreamReader和StreamWrite读写文本文件(读取字符信息)
1.StreamReader
2.StreamWriter
- 用替换的方式写入
- 用追加的方式写入
小练习:写一个程序逐行输入字符串,将每一行的内容写入到同个目录下的1.txt文件并换行,最后遇到q字符结束写入
二、字符串类String
1.关于字符串的几个方法
2.使用StringBuilder创建字符串
1.为什么要使用StringBuilder
如果我们频繁去删除和添加字符串中的内容,使用string生成的字符串我们知道每次更改会重新指向堆中新的数据,这样会重复删除新建数据非常耗性能,如果使用StringBuilder不会频繁申请内存空间,可以自动向后扩展
2.StringBuilder创建字符串的方式
三、正则表达式
1.正则表达式有什么用
2.正则表达式是什么
正则表达式其实就是由普通字符以及特殊字符(元字符)组成的文字模式,该模式描述在查找文字主体时待匹配的一个或多个字符串。
3.各种元字符
(1)字符类
[ char_group]:匹配字符组中的任意一个字符
[^char_group]:匹配除字符组之外的任意一个字符
[first-last]:匹配从first到last的字符范围中的任意一个字符,字符范围包括first和last。
.一个点:通配符,匹配除\n之外的任意一个字符
\w:匹配任意一个单词(word)字符,单词字符通常是指A-Z、a-z和0-9
\W:匹配任意一个非单词字符,是指除A-Z、a-z和0-9之外的字符
\s:匹配任意一个空白字符
\S:匹配任意一个非空白字符
\d:匹配任意一个数字字符
\D:匹配任意一个非数字字符
(2)定位类
^:默认情况下,匹配字符串的开始位置;在多行模式下,匹配每行的开始位置;
$:默认情况下,匹配字符串的结束位置,或 字符串结尾的\n之前的位置;在多行模式下,匹配每行结束之前的位置,或者每行结尾的\n之前的位置。
\A:匹配字符串的开始位置;
\Z:匹配字符串的结束位置,或 字符串结尾的\n之前的位置;
\z:匹配字符串的结束位置;
\G:匹配上一个匹配结束的位置;
\b:匹配一个单词的开始或结束的位置;
\B:匹配一个单词的中间位置;
(3)量词、贪婪和懒惰
*:规定前面字符出现0次或多次
+:出现1次或多次
?:出现0次或1次
{n}:出现n次
{n,}:出现至少n次
{n,m}:出现n到m次
x|y x或者y中的一个字符
(4)取消元字符作用
在元字符前加\取消元字符的作用,变成普通字符,比如要显示+号,我们要使用+要不然会识别成贪婪元字符表示前面的字符出现1次或多次
3.Regex.Replace()方法替换匹配出来的字符串
4.Regex.IsMatch(字符串,正则表达式)判断字符串是否符合正则表达式
5.匹配是否是正确的邮箱
邮箱的格式是qq号(5~12位数字)+@qq.com
6.Regex.Match(s,pattern)匹配第一个满足的字符串
7.Regex.Matches(s,pattern)匹配所有满足的字符串并返回出来
8.Regex.Split(s,pattern)实现字符串的分割
9.常见的几个正则表达式
10.正则表达式中的断言
(1)为什么需要断言
我们前面使用^和$来匹配子串在字符串中出现的位置,如果字符串的位置不是在最后或者最前面而是在某个字符之前,这个时候我们还想匹配出指定位置的字符串,就得使用断言。
(2)四种断言
| 正则 | 名称 | 含义 | 示例 |
|---|---|---|---|
| (?<=Y) | 肯定逆序断言 | 左边是Y | (?<=\d)th 左边是数字的 th,可以匹配上 9th |
| (?<!Y) | 否定逆序断言 | 左边不是Y | (?<!\d)th 左边不是数字的 th,可以匹配上 health |
| (?=Y) | 肯定顺序断言 | 右边是Y | six(?=\d) 右边是数字的 six,可以匹配上 six6 |
| (?!Y) | 否定顺序断言 | 右边不是Y | six(?!\d) 右边不是数字的 six,可以匹配上 sixgod |
(3)(?<=Y)和(?<!Y)
表示匹配出的子串左边必须是符合某种类型的字符串,<=表示左边是Y类型的,<!表示左边是非Y类型,比如匹配123abcd234fd中abcd后面的234,那么我们可以使用(?<=d)\d+表示满足数字的左边是字符d的子串,这样我们匹配出的就是234
(4)(?=Y)和(?!Y)
表示匹配出的子串右边必须是符合某种类型的字符串,=表示右边是Y类型,!表示右边是非Y类型,比如匹配123abcd234fd中所有在123和234中间的字符那么我们就可以使用(?<=y)和(?=y)一起来判断