字符串的不可变性
//创建一个string类型的对象
//因为是引用类型,所以会在堆中开辟一个空间,用来存储内容“123”,他的地址为p1
//并且在栈中开辟一个空间,名称为str1,他存储的内容为p1
//string str1 = "123";
//当再次重新赋值为“456”,的时候
//原先堆中存放“123”的空间不变,会重新开辟一段新的空间用来存储“456”,这个新空间的地址为p2
//然后栈中的空间str1存储的内容变为新空间的地址p2
//堆中的空间p1会在之后被垃圾回收机制给释放掉
//因为每次重新赋值都会重新开辟空间,所以如果重复大量的赋值会占用大量的内存
//str1 = "456";
字符串的暂存池特性
//如下面两个string对象
//在即使窗口个中可以看到,栈中的地址不同,但是堆中的地址是相同的
//在创建对象s1的时候会先在堆里检测,如果有123,则直接指向该空间,如果没有则重新开辟一个空间
//string s1 = "123";
//string s2 = "123";
字符串可以看做一个只读的字符数组,通过下标可以去到其中的字符
//string s = "abcde";
//char c = s[1];//取到b这个字符
//s[2] = 'a';//应为是只读的,所以如果想要通过这种方式赋值会报错
字符串和字符数组之间的转换
//string s = "abcdefg";
//char[] chs = s.ToCharArray();//转换成字符数组
//s = new string(chs);//把字符数组转换成字符串重新赋值给对象s
使用方法IsNullOrEmpty判断是否为空或者为null
//string s = null;
//if (string.IsNullOrEmpty(s))
//{
// Console.WriteLine("空");
//}
//else
//{
// Console.WriteLine("不空");
//}
Equals判断两个字符串是否相同
//Equals默认判断的是两个对象的地址,如果地址相同则返回true,如果不相同则返回false
//string s1 = "abc";
//string s2 = "aBC";
//不忽略大小写的判断
//if (s1.Equals(s2,))
//忽略大小写
//if (s1.Equals(s2,StringComparison.OrdinalIgnoreCase))
//{
// Console.WriteLine("相同");
//}
//else
//{
// Console.WriteLine("不同");
//}
//Console.ReadKey();
使用IndexOf获取某个字符串出现的位置,返回的为对应的下标
//string s = "我爱北京爱天安门";
//int index = s.IndexOf("爱");//判断[爱]出现的第一个位置
//int index2 = s.IndexOf("爱", 2);//从下标为2的字符开始判断[爱]出现的位置
//int index3 = s.LastIndexOf("老");//判断[老]最后一次出现的位置
使用Substring方法截取字符串,返回结果为一个新的字符串
//string s = "abcdefg";
//s = s.Substring(1,4);//从下标为1的开始截取,截取4个字符,返回结果为[bcde]
使用split方法,把字符串能转换成数组
//string s = "a , -- b";
//string[] newS = s.Split(new char[] { ' ', '-', ',' });//转换成数组,并且把符合调价的字符,转换成空
//string[] newS = s.Split(new char[] { ' ', '-', ',' }, StringSplitOptions.RemoveEmptyEntries);//把转换的空给去掉
把指定的字符插入到一个数组之间,并且返回一个组装的字符串
//string[] names = { "张三", "李四", "王五", "赵六" };
//string s = string.Join("|",names);//转换之后返回结果为[张三|李四|王五|赵六]
//string s = string.Join("|",1,3.14,true,'c',5000m,"张三");//可以把任何类型的数据放进去,这里比较随意
//把所有的[--]替换成一个[-],输出结果为[1-2-3-4]
//string s = "1-----------2---------3-----------4--";
//string[] strNew = s.Split(new char[] { '-' }, StringSplitOptions.RemoveEmptyEntries);
//s = string.Join("-", strNew);
public class Person
{
public string Name
{
get;
set;
}
public int Age
{
get;
set;
}
/// <summary>
/// 重写Equals方法,
/// 用来比较Name与Age是否相同
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public override bool Equals(object obj)
{
Person p = obj as Person;
if (this.Name == p.Name && this.Age == p.Age)
{
return true;
}
else
{
return false;
}
}
/// <summary>
/// 重写ToString方法
/// 输出哈哈哈
/// </summary>
/// <returns></returns>
public override string ToString()
{
return "哈哈哈哈";
}
}
初始化器
//对象初始化器
Person p = new Person() { Name = "战三", Age = 18 };
//效果等同于下面
Person p1 = new Person();
p1.Name = "张三";
p1.Age = 18;
//数组初始化器
int[] nums = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
//效果等同于下面
int[] nums2 = new int[9];
nums2[0] = 1;
....
File操作
//File.ReadAllLines//返回的是string数组,数组的每个元素是一行信息
//File.ReadAllText//返回的是一个字符串,不分行
//File.ReadAllBytes//返回的是一个字符数组,多用来读取照片等
//File.WriteAllText//直接以文本的形式写入,会覆盖原内容,写入的是一个字符串
//File.WriteAllLines//直接写入文本,也会覆盖原内容,写入的是一个字符串数组
//File.WriteAllBytes//直接写入文本,也是会覆盖原内容,传入的参数是一个字节数组
FileStream操作
string rePath = "";//读取的文件路径
string wrPath = "";//写入的文件路径
//创建一个读取的对象
using (FileStream fsRead = new FileStream(rePath, FileMode.OpenOrCreate, FileAccess.Read))
{
//创建一个保存读取信息的字符数组
byte[] buffer = new byte[1024 * 1024 * 5];
//创建一个写的对象
using (FileStream fsWrite = new FileStream(wrPath, FileMode.OpenOrCreate, FileAccess.Write))
{
//循环的读取和写入
while (true)
{
//开始读取
int r = fsRead.Read(buffer, 0, buffer.Length);
//如果读取到的内容为空,跳出循环读取/写入结束
if (r == 0)
{
break;
}
//如果读取内容不为空,则写入
fsWrite.Write(buffer, 0, r);
}
}
}
Path操作
string path = @"C:\Users\Administrator\Desktop\test\1.txt";
Console.WriteLine(Path.GetFileName(path));//获取带扩展名的文件名称
Console.WriteLine(Path.GetFileNameWithoutExtension(path));//获取不带扩展名的文件名称
Console.WriteLine(Path.GetDirectoryName(path));//获取文件路径
Console.WriteLine(Path.GetFullPath(path));//获取绝对路径
Console.WriteLine(Path.Combine(@"C:\", "1.txt"));//连接成文件路径
Console.ReadKey();
Directory文件夹操作
string path = @"C:\Users\Administrator\Desktop\test";
string[] paths = Directory.GetFiles(path);//获取该路径下的所有文件
string[] paths2 = Directory.GetDirectories(path);//获取该路径下的所有文件夹