一、大文件读取方式
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中的一个字符
复制代码
3.Regex.Replace()方法替换匹配出来的字符串
4.Regex.IsMatch(字符串,正则表达式)判断字符串是否符合正则表达式
5.匹配是否是正确的邮箱
邮箱的格式是qq号(5~12位数字)+@qq.com
6.Regex.Match(s,pattern)匹配第一个满足的字符串
7.Regex.Matches(s,pattern)匹配所有满足的字符串并返回出来
8.常见的几个正则表达式
作者:用户8922541182901
链接:juejin.cn/post/715540…
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
/*using System.Threading.Tasks.Dataflow;
using System;
using System.IO;
using System.Text;
namespace demo_10_17
{
internal class Program
{
static void Main(string[] args)
{
// 1、接口 可以实现多继承,接口指定一组没有函数体的函数成员
//C#本质在学:多种类库的使用
//File类,读写文件 整个文件信息一次性全部读写出来,一般读写小文件
string str = File.ReadAllText("./1.txt", Encoding.UTF8); //绝对路径和相对路径
//读取所有行的信息
Console.WriteLine(str);
string[] strArray = File.ReadAllLines("./1.txt"); //读取所有行的内容放到数组中
foreach(string i in strArray)
{
Console.WriteLine("第i行:{0}",i); //打印每一行的信息
}
File.WriteAllText("./1.txt","替换的内容");
string[] str3 = { "1", "2", "3" };
File.AppendAllLines("./1.txt",str3);//表示将数组中的字符串逐行追加到文件中
File.AppendAllText("./1.txt", "\n追加的内容");
Console.WriteLine();
}
}
}*/
/*//泛型
namespace demo_10_17
{
public class MyMath<T> //创建了一个泛型类,T的类型由我创建对象的时候决定
{
public T GetNum(T num1,T num2)
{
dynamic num3 = num1;//动态类型的变量,我们可以将泛型的值赋给动态类型的变量,就可以进行运算操作
dynamic num4 = num2;
return num3+num4;
}
}
internal class Program
{
static void Main(string[] args)
{
MyMath<string> math = new MyMath<string>(); //创建了一个math对象,这时T的类型为string类型
Console.WriteLine(math.GetNum("asdfghj","qertyrt"));
MyMath<int> math1 = new MyMath<int>(); //这时T的类型为int类型
Console.WriteLine(math1.GetNum(123,345));
}
}
}*/
/*namespace demo_10_17
{
internal class Program
{
static void Main(string[] args)
{*/
/* List<int> list = new List<int>() { 1, 12, 1, 2, 3, 2, 2, 6, 5 };//定义了一个泛型列表
//元素长度 count 列表的容量 capacity
Console.WriteLine(list.Count); //如果里面没有值的话,元素的个数是0,容量也是0
Console.WriteLine(list.Capacity);
list.Add(88);
Console.WriteLine(list.Count - 1); //读取最后一个的值
list.Insert(0, 5); //在下标为0的位置插入一个5
Console.WriteLine(list[0]);
list.Remove(5); //填你要删除的元素
list.RemoveAt(0);//填要删除的元素的下标
foreach (int i in list)
{
Console.WriteLine(i);
}
//集合类 字典 键和值
Dictionary<string, string> dic = new Dictionary<string, string>();
dic.Add("name", "王三"); //前面表示键名,后面表示值
Dictionary<string[], string> dic2 = new Dictionary<string[], string>();
dic2.Add("name2", "小明");
dic2.Concat(dic2);
foreach (string k in dic.Values) //表示遍历所有的值
{
Console.WriteLine("值为{0}", k);
}
foreach (string k in dic.Keys) //表示遍历所有的键名
{
Console.WriteLine("键名为{0}", k);
}
foreach (KeyValuePair<string, string> k in dic) //KeyValuePair表示键值对的类型
{
Console.WriteLine("值为{0},键名为{1}", k.Value, k.Key);
}
Console.WriteLine(dic.ContainsKey("name")); //ture
Console.WriteLine(dic.ContainsValue("王三")); //ture
*/
//练习1 将一个数组中的奇数放在一个集合中,再把偶数放在另一个集合中,最终将两个集合合并为一个集合,并且奇数显示在左边,偶数显示在右边
/* int[] a = {1,3,2,4,5};
List<int> list1= new List<int>();
List<int> list2= new List<int>();
foreach(int i in a)
{
if (i % 2 != 0) { list1.Add(i); }
else { list2.Add(i); }
}
list1=list1.Concat(list2).ToList(); //合并list1和list2返回一个新的列表
foreach(int i in list1)
{
Console.WriteLine(i);
}
//练习2 使用字典的方式计算出任意字符串中每个字符出现的次数
string str1 = "qwertyutttqq";
Dictionary<char, int> dic1 = new Dictionary<char, int>();
foreach (char i in str1)
{
if (dic1.ContainsKey(i)) //判断字典dic1中有没有对应的键名
{
dic1[i]++;
}
else
{
dic1.Add(i, 1);
}
}
foreach(KeyValuePair<char, int> k in dic1)
{
Console.WriteLine("字符{0},出现的次数为{1}",k.Key,k.Value);
}
}
}
}*/
//大文件读取方式 FileStream文件流 读取的是字节,可以读取所有的文件
/* FileStream fsRead = new FileStream("./1.txt",FileMode.OpenOrCreate,FileAccess.Read);
//创建一个数组
byte[] fsByte = new byte[1024*1024*4]; //规定读取最大的字节长度
//开始读取文件,读取完返回的是实际读取到的字节数
int rNum=fsRead.Read(fsByte);
//根据字节数,将读取到的字节转为字符串
string a=Encoding.Default.GetString(fsByte,0,rNum);
Console.WriteLine(a);
Console.WriteLine(rNum);
fsRead.Close(); //关闭文件流
fsRead.Dispose();//释放所占的资源*/
//写入 替换 追加
/* using (FileStream fdWrite = new FileStream("./1.txt", FileMode.Append, FileAccess.Write))
{
string b = "123456";
//将字符串转成字节
byte[] fdByte = Encoding.UTF8.GetBytes(b);
fdWrite.Write(fdByte); //将文件信息使用追加的形式写入到文件中
}
//读取的是字符串
StreamReader fileRead = new StreamReader("./2.txt",Encoding.Default);
*//*string fileString = fileRead.ReadLine();//读取每一行的信息
char allText = fileRead.ReadToEnd();//读取所有的信息
Console.WriteLine(fileString);*//*
Console.WriteLine((char)fileRead.Read());
fileRead.Close(); //关闭文档流*/
//写入信息
/* StreamWriter fileWrite = new StreamWriter("./1.txt");
fileWrite.WriteLine("第一行");
fileWrite.WriteLine("第二行");
fileWrite.Close();
*/
//练习1 输入每一行的内容,逐行写入到1.TXT中直到遇到q结束
using System;
using System.Text;
using System.IO;
namespace demo_10_17
{
internal class Program
{
static void Main(string[] args)
{/*
StreamWriter fileWrite = new StreamWriter("./1.txt");
while (true)
{
string addStr = Console.ReadLine();
//什么时候跳出循环,q找出来对应的值不为-1
int Qindex = addStr.IndexOf("q");
if (Qindex != -1) //说明q存在
{
addStr = addStr.Substring(0, Qindex);
fileWrite.WriteLine(addStr);
break;
}
else //q不存在
{
fileWrite.WriteLine(addStr);
}
}
string str = "asdfa";
Console.WriteLine(str.IndexOf("k")); //如果找到该字符串,返回第一次出现的位置,没有的话就返回0
*/
//StringBuilder,申请了一个动态内存空间
StringBuilder builderStr1 = new StringBuilder(4,20);//基本容量,最大容量
StringBuilder builderStr2 = new StringBuilder("asdfghjkl");
builderStr1.Append("asdfg"); //追加到最后
builderStr1.Insert(0, "1"); //在指定下标位置插入内容
builderStr1.Remove(0,1); //从0开始删除,删除一个字符
builderStr1[0] = '2';
Console.WriteLine(builderStr1);
Console.WriteLine(builderStr1.Capacity);
}
}
}