一、C#常用类
C#中有一些具有特定功能的类,例如操作字符串的类、用于操作日期的类、生成随机数的类
字符串的基本特征
1、字符串的不可变性
字符串对象一旦创建,就无法对其进行修改。
.NET框架的底层提供了一种机制,当一个字符串已经被创建,那么以后每次创建相同值的字符串时都会直接引用它的地址值,而无需为自己的值开辟新的内存空间,这种机制被称为字符串拘留池机制。
2、string数据类型是一个类,而其他数据类型基本都是机构(struct) 。
3、对一个字符串变量赋值后,其实那个变量也就是new后的实例对象。(也就是说string这个类可以不通过new关键字来实例化一个对象,直接赋值也就是对其实例化后的对象赋值)
字符串与字符串数组
可以将字符串看作一个char类型的只读数组,即字符数组。可以通过Length属性来获取字符串长度
二、String和string异同及String类的构造方法
1、String和string异同
string类型是C#语言中用来表示字符串的类型,而String类型是.NET Framework通用类型系统中用来表示字符串的类型。在程序开发过程中,这两种类型之所以都能表示字符串,是因为程序编译时,C#语言中的string类型会被编译成.NET Framework通用类型系统的String类型。
string str="";
string str=String.Empty;
这两种空字符串的定义是一样的。
三、String类的静态方法
1、Compare()方法
功能:用于比较两个字符串是否相等,该方法有两个string类型参数,用于接收进行对比的字符串,如果第一个字符串大于第二个字符串,则返回一个大于0的int整数1;如果两个字符串相同,则返回0;若第一个字符串小于第二个字符串,则返回一个小于0的int整数-1。(字母大于数字,同一个字母大写大于小写,可以设置第三个参数为true,表示忽略大小写)
csharp
String.Compare(str1, str2,true)
2、Format()方法
Format()方法的作用是格式化字符串,它的用法与Console.WriteLine()非常类似,不同的是Format()方法只能格式化字符串,而Console.WriteLine()可以输出。
csharp
string res = String.Format("字符串{0}包含{1}个字符", str, str.Length);
3、IsNullOrEmpty()方法
IsNullOrEmpty()方法用来判断字符串是否为空或长度是否为0,当字符串为空或者长度为0时,返回值为true,否则返回false。
4、Join()方法
Join()方法的作用是使用指定的字符串,将字符串数组中的元素连接起来。
csharp
string[] strs = { "字符串", "使用竖线", "连接" };
string res = String.Join("|", strs);
四、String类的实例方法
除静态方法外,String类中还提供了一些方法,这些方法需要先创建实例对象才能被调用,即String类的实例方法。
1、Contains()方法
Contains()方法用于判断一个字符串中是否包含指定字符串。常用格式:
bool Contains(string str)
csharp
注意赋值也就是实例化后的对象
if (str1.Contains(str2))
{
Console.WriteLine("str2包含在str1中");
}
else
{
Console.WriteLine("str1不包含str2");
}
2、EndsWith()方法
判断当前字符串是否以指定字符串结尾。常用格式:
bool EndsWith(string str)
csharp
string input = Console.ReadLine();
if (input.EndsWith(".mp3"))
{
Console.WriteLine("文件格式正确");
}
else
{
Console.WriteLine("输入文件不是mp3格式");
}
3、IndexOf()方法
IndexOf()方法用于返回指定字符或字符串在字符串中的索引,在查找过程中,从字符串左边开始查找,如果找到第一个,便返回对应的索引且方法结束,否则返回-1。即是返回首次出现的位置,没有找到返回-1。
常用格式:
int IndexOf(char ch)
csharp
string str = "ab222eeeefg";
//查找第一个'e'字符的位置
int index = str.IndexOf("e");
4、Split()方法
将字符串以某种字符分隔。
常用格式:
string[] Split(char ch)
csharp
注意,使用Split时,需要被分割的字符串有分割符
string str = "I have a dream";
string[] strs = str.Split(' ');
例如: string str2="I/also/have/a/dream ";
string[] strs2=str.Split("/");
5、Substring()方法
Substring()方法的作用是对字符串进行截取(即取子字符串)。
常用格式:
string Substring(int index,int Length)
如果参数Length没有,则表示取后面所有的;如果Length超过字符串后面的长度,则会报错。
csharp
string path = "D:\\2023年\\Chasrp\\日志.docx";
int index = path.IndexOf(".");
string fileName = path.Substring(index + 1);
6、ToCharArray()方法
ToCharArray()方法的作用是将字符串转换成一个字符数组。
常用格式:
char[] ToCharArray()
csharp
//将字符串转换成字符数组
char[] chs = str.ToCharArray();
7、ToUpper()、ToLower()方法
ToUpper()方法的作用是将字符串中所有的英文字母都变成大写的。ToLower()方法是将字符串中所有的英文字母都变成小写的。
8、Trim()方法
Trim()方法的作用是用来去除字符串两端的连续空格。
五 高效的StringBuilder类
1、StringBuilder类
使用的原因:在程序开发中,经常会使用大量的字符串,由于字符串是不可变的,因此在代码中频繁的拼接字符串会创建多余的对象,从而影响程序的性能。
作用:C#中提供了StringBuilder类,它和String类都用来操作字符串。与String类不同的是,StringBuilder类创建的字符串的长度是可以改变的,它类似一个字符容器,当在其中添加或删除字符时,并不会产生新的StringBuilder对象,因此可以让字符串的拼接操作变的更加高效。
csharp
stringBuilder Append(string str) 将字符串添加到StringBuilder对象的末尾
stringBuilder Insert(int offset ,string str) 将字符串中的offset位置插入字符串str
stringBuilder Replace(string str1,string str2) 在StringBuilder对象中替换指定的字符或字符串序列
stringBuilder Remove(int index,int length) 将字符串从指定的索引位置开始length长度个字符串删除
string ToString() 将StringBuilder类型转换成string 类型
csharp
StringBuilder sb = new StringBuilder();
sb.Append("abcd");
sb.Insert(3, "aaa");
sb.Remove(3, 3);
sb.Replace("a", "b");
Console.WriteLine("替换字符串:"+sb.ToString());
六、DateTime、TimeSpan结构体
1、DateTime结构体的构造方法
在程序开发中,需要对日期进行处理,例如向系统录入数据,因此需要记录当前时间。为此C#中提供了一个表示时间的DataTime结构体
说明:DateTime不是class,而是struct
csharp
DateTime(int year, int month, int day) 用指定的年、月和日实例化DateTime对象
DateTime(int year, int month, int day, int hour, int minute, int second) 用指定的年、月、日、时、分和秒实例化DateTime对象
说明:
(1)第一种构造方法没有指明时分秒,默认都为0。
(2)年月日时分秒如果不在合法范围内,则会报错。
2、TimeSpan结构体的构造方法
TimeSpan对象用于表示时间间隔,在使用DateTime结构体时经常需要通过该对象增加时间间隔。TimeSpan结构体的两个构造方法。
csharp
TimeSpan(int hour, int minute, int second) 用指定的时、分、秒实例化TimeSpan对象
TimeSpan(int day int hour, int minute, int second) 用指定的日、时、分、秒实例化TimeSpan对象
3、DateTime结构体的常用属性
在日期数据处理的过程中,经常需要通过DateTime对象的属性来获取日期中的某一部分的信息
csharp
Date |获取此实例的日期部分
Day |获取此实例所表示的日期为该月中的第几天
Hour |获取此实例所表示日期的小时部分
Minute|获取此实例所表示日期的分钟部分
Month |获取此实例所表示日期的月份部分
Today |获取当前日期
Year |获取此实例所表示日期的年份部分
Now |获取一个 DateTime 对象,该对象设置为此计算机上的当前日期和时间,表示为本地时间。
通过ToString()方法按指定格式输出,y表示年,4位y表示4位数年份,2位yy表示2位数年份;大写M表示月,2位MM,表示月份用2位数表示;小写d表示日,2位dd,表示日用2位数表示;H表示24小时制小时,小写h表示12小时制小时,小写m表示分,小写s表示秒。
csharp
DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
4、DateTime结构体的常用方法
在程序开发中,经常需要对日期进行处理,比如比较两个日期是否相等、对日期进行修改等。
csharp
DateTime Add(TimeSpan ts) |返回一个 DateTime对象,它将指定 时间间隔添加到此实例的值上。
bool Equals(DateTime dt) |返回一个bool值,指示此实例是否与指定的 DateTime 实例相等。
string ToShortTimeString() |将当前 DateTime 对象的值转换为其等效的短时间字符串表示。只有时:分
string ToLongTimeString() |将当前 DateTime 对象的值转换为其等效的长时间字符串表示。时:分:秒
string ToShortDateString() |将当前 DateTime 对象的值转换为其等效的短日期字符串表示,如2023/1/11
string ToLongDateString() |将当前 DateTime 对象的值转换为其等效的长日期字符串表示,如2023年5月13日
static int Compare(DateTime dt1,DateTime dt2) |对两个 DateTime 的实例进行比较,并返回一个指示第一个实例是早于、等于还是晚于第二个实例的整数。
csharp
DateTime dt = DateTime.Now;
//定义一个时间对象
TimeSpan ts = new TimeSpan(1, 0, 0);
//当前时间加上一小时
dt=dt.Add(ts);
Console.WriteLine("dt:"+dt);
七、Random类
在程序开发中,经常需要生成一些随机数,例如,抽奖的号码就是随机生成的,为此,在C#语言中提供了一个Random类,该类表示伪随机数生成器,它可以随机产生数字。
csharp
Random() 使用与时间相关的默认种子值,初始化 Random 类的新实例。
Random(int seed) 使用指定的种子值初始化 Random 类的新实例。
第一个构造方法是无参数的,通过它创建的Random实例对象每次使用的种子值是随机的,因此每个对象产生的随机数不同。
如果希望创建的多个Random实例对象产生相同序列的随机数,则可以在创建对象时调用第二个构造方法,传入相同的种子值。
Random类提供了很多的方法来生成各种伪随机数,可以指定生成随机数的范围,不仅可以生成整型随机数,还可以生成浮点类型的随机数
csharp
int Next() 返回一个非负随机整数。
int Next(int max) 返回一个小于所指定最大值的非负随机整数
int Next(int min, int max) 返回在指定范围内的任意整数[min,max)
double NextDouble () 返回一个介于 0.0 和 1.0 之间的随机浮点数[0.0,1.0)