char(赋值用单引号)
单独字符
//char代表单独的字符类型
char c = 'i'; //赋值用单引号
字符串(麻烦)
char[] ar = { 'h', 'e', 'l', 'l', 'o' };
由于用char写字符串太麻烦,于是出现一个新类型来处理字符串——string。
string字符串(赋值用双引号)
所有的对象怎么创建的?都是“new 类();”这样创建的。
只有字符串相当于比较特殊的类。“hello”相当于new了一个对象。
string str = "hello";
//string它本身也是个类。所以写出“hello”,也相当于创建了一个字符串的对象。
把string类型转成字符数组类型:
char[] cs = str.ToCharArray();
//等号右边:对象的名字.方法的名字。表示调用这个对象的这个方法。
Console.WriteLine(cs[1]); //输出字符数组里的第二个字符。
因为可以直接提取string里的字符,所以一般不用转成字符数组。
Console.WriteLine(str[1]); //输出字符数组里的第二个字符。
长度(最常用)
Console.WriteLine(str.Length); //显示数组长度。此处Length是属性。
截取(Substring两种方式)
方式一:从某处开始截取,直到最后
//从第3个字符开始截取
Console.WriteLine(str.Substring(2));
//结果为“hello”里的llo
方式二:从某处开始截取,且要求截取几个字符
//第一个2代表:从第3个字符开始。第二个2代表:截取2个字符长度。
Console.WriteLine(str.Substring(2,2));
//结果为“hello”里的ll
搜索(3种方式)
搜索字符串里是否有“l”?
方式一:从头开始搜索
//从头搜索字符串,返回位置信息。查找不到返回负数。返回正数第一个l的位置
int index = str.IndexOf("l");
Console.WriteLine(index);
//因为是hello里正数第一个l,所以结果为2。
方式二:从尾部开始搜索
//从尾部搜索字符串,返回位置信息。查找不到返回负数。返回倒数第一个l的位置
index = str.LastIndexOf("l");
Console.WriteLine();
//因为是hello里到数第一个l,所以结果为1。
方式三:只搜索字符串的包含关系(只要有即可)
//搜索字符串包含关系。即不需要返回值
bool res = str.Contains("l");
Console.WriteLine(res); //打印结果Ture or False
英文字母大小写转换
注意:写在WriteLine()括号里的方法,通常不会改变原本的值,它相当于重新开辟一块内存。
转成小写
string str = "Hello CSharp";
Console.WriteLine(str.ToLower()); //转成小写,输出
转成大写
Console.WriteLine(str.ToUpper()); //转成大写,输出
删除
删除头尾多余的空格 (很常用)
无论多少个空格,只要在两头,都可以去除。
string str = " 小李飞刀 "; //此时字符串的头尾有多余的空格
Console.WriteLine(str);
//删除头尾的空格
Console.WriteLine(str.Trim());
删除头尾指定字符
方式一:Trim
//删除头尾的指定字符
Console.WriteLine(str.Trim('_'));
//删除头部的指定字符
Console.WriteLine(str.TrimStart('_'));
//删除尾部的指定字符
Console.WriteLine(str.TrimEnd('_'));
方式二:Remove
//删除从索引3开始的全部字符
Console.WriteLine(str.Remove(3));
//删除从索引3开始的2个字符的长度
Console.WriteLine(str.Remove(3,2));
删除空格与删除指定字符的区别
插入(在第几索引的前面添加)
string str = "_小李飞刀_";
//插入(在第几索引的前面添加)。此处目的是变成"_小李_飞刀_"
Console.WriteLine(str.Insert(3,"_")) ;
//字符用单引号,此处是双引号,代表此处可以插入字符串
分割(非常非常常用)
string str = "_小_李_飞_刀_";
//分割字符串(特别特别常用)
string[] strs = str.Split('_'); //分割成名叫strs的数组了
Console.WriteLine(strs[3]);
//结果:飞。第0索引是空,第1索引是小,第2索引是李,第3索引是飞,第4索引是刀,并且还有第5索引——空。
拼接
方式一:Concat
//把数组字符串拼接起来
Console.WriteLine(string.Concat(strs));
方式二:加号
Console.WriteLine("小"+"李");
方式三:使用字符串构造器去创建字符串
字符串构造器,算是一个新的类,这个类叫做StringBuilder。
它拼接字符不是使用加号,而是通过Append这个方法。
StringBuilder sb = new StringBuilder();
sb.Append("今天,"); //拼的第一个。这个方法可以无数次用
sb.Append("天气");
sb.Append("不错!");
//拼完之后想把它打印成普通的字符串,要使用ToString这个方法就可以将上面的方法转成字符串。
Console.WriteLine(sb.ToString());
方式四:Join(用自定义字符拼接)
//把数组字符串用自定义字符拼接。此处用波浪线拼接
Console.WriteLine(string.Join("~",strs));
替换(可用于屏蔽关键字)
//替换字符 把_替换成*
Console.WriteLine(str.Replace('_','*'));
这个方法支持t替换成字符串,所以用双引号即可
string str = " 小_ 李_ 飞_ 刀_";
//替换字符 把空格替换成无
Console.WriteLine(str.Replace(" ",""));
格式化
格式化字符
//格式化字符串
str = string.Format("1+1=2");
//注意此处Format方法不是str(对象名)调用,而是string(类名)来调用的,说明Format方法是个静态的。
Console.WriteLine(str);
//结果:1+1=2
优点:占位符
大括号里的是占位符,占位符有几位,后面的参数就要写几位。
str = string.Format("{0}+{1}={2}",1,1,2);
//结果:1+1=2
str = string.Format("{0}+{1}={2}",1,1,1+1);
//结果:1+1=2。
便于计算大数据
int a = 36000;
int b = 44000;
str = string.Format("{0}+{1}={2}",a,b,a+b);
//注意此处Format方法不是str(对象名)调用,而是string(类名)来调用的,说明Format方法是个静态的。
Console.WriteLine(str);
//结果:36000+44000=80000
格式化日期
对占位符有要求的话,加冒号。
日期的格式是yyyyMMdd(年月日),他们之间的分隔符随意,此处用的杠和冒号。
str = string.Format("{0:yyyy-MM-dd hh:mm:ss}",DateTime.Now);
/*此处只有0一个占位符,我们给它当前的日期。
DateTime(类名).Now(方法)说明是个静态的。它的含义是返回当前的日期。
但这个时间只有格式化成我们规定的样式,我们才能看懂。*/
Console.WriteLine(str);
//结果:2019-06-08 09:57:56
单例类
内部
单例
正常情况下,一个类可以实例化出多个对象。单例:一个类只能实例化出一个对象。
管理类:稚嫩有一个对象存在,会用到单例比较多。
员工:小王、小李
老板:副总
声音播放器:播放音乐的,播放音效的,播放环境音的
声音管理器
//写成单例类
public class PersonManager
//上面有一个类叫Person,这里写个类用于管理Porson。
{
private static PersonManager instance;
//private(私有的)static(静态)person(类的名字)instance(翻译为:实例)
//想访问私有的,便要写一个同名(首字母大写)的属性了。
public static PersonManager Instance
{
/*属性里原本有Set和Get。其实是可以二选一的。
如果只有Set,说明只能赋值,不能取出来。
如果只是Get,说明只能取出来,不能赋值。单例的话,一般只写Get。*/
get
{
//做一个判断:如果变量默认是空
if(instance == null)
{
instance = new PersonManager(); //实例化了一个管理类
}
return instance; //返回
}
}
public Person[] persons;
//通过一个属性:person类型的数组,叫persons。
}
外围
//外界调用时
PersonManager.Instance.persons;
// PersonManager.Instance;
/*第二次调用时,因为已经有第一次的返回值了,所以输入的不是空,导致直接返回。
所以无论调用多少次,都是第一次产生的那个对象*/