Math类
/*
* Math类主要用于一些与数学相关的计算,并提供了很多静态方法方便访问,
* 常用的方法:
* Abs:取绝对值
* Ceiling:返回大于或等于指定的数字的最小整数值
* Floor:返回小于等于指定数字的最大整数
* Round:返回四舍五入
* Max:返回两个数中较大数的值
* Min:返回两个数中较小的值
* Equals:返回指定的对象实例是否相等
*
*/
class Program
{
static void Main(string[] args)
{
//圆周率
Console.WriteLine(Math.PI);
//取绝对值
Console.WriteLine(Math.Abs(-2));
Console.WriteLine("---------------------------------");
//返回大于或等于的最小整数(小数点后面有值的就直接+1)
Console.WriteLine(Math.Ceiling(33.0));
Console.WriteLine(Math.Ceiling(33.1));
Console.WriteLine(Math.Ceiling(33.9));
Console.WriteLine("---------------------------------");
//返回小于等于指定数字的最大整数(不需要管小数点后面的值,取整数)
Console.WriteLine(Math.Floor(33.0));
Console.WriteLine(Math.Floor(33.1));
Console.WriteLine(Math.Floor(33.9));
Console.WriteLine("---------------------------------");
//四舍五入
Console.WriteLine(Math.Round(33.0));
Console.WriteLine(Math.Round(33.1));
Console.WriteLine(Math.Round(33.9));
Console.WriteLine(Math.Round(33.232,2));//后面的数字,代表保留小数点后几位
Console.WriteLine(Math.Round(33.236,2));
Console.WriteLine("---------------------------------");
Console.WriteLine(Math.Equals(11, 12));
Console.WriteLine(Math.Equals(11, 11));
Console.WriteLine("---------------------------------");
Console.WriteLine("请输入第一个数:");
int num1 = int.Parse(Console.ReadLine());
Console.WriteLine("请输入第二个数:");
int num2 = int.Parse(Console.ReadLine());
Console.WriteLine("两个数中较大的数为{0}", Math.Max(num1, num2));
Console.WriteLine("两个数中较小的数为{0}", Math.Min(num1, num2));
Console.ReadKey();
}
}
Random类
/*
* Next() 每次产生一个不同的随机正整数
* Next(int max Value) 产生一个比max Value小的正整数
* Next(int min Value,int max Value) 产生一个minValue~maxValue的正整数,但不包括maxValue
* NextDouble() 产生一个0.0~1.0的浮点数
* NextBytes(byte[] buffer) 用随机数填充字节数的数组
*
*
*
*/
class Program
{
static void Main(string[] args)
{
//Random随机数类
Random rd = new Random();
Console.WriteLine("产生一个随机的整数:{0}", rd.Next());
Console.WriteLine("产生一个比30小的正整数数:{0}", rd.Next(30));
Console.WriteLine("产生一个10以内的数:{0}",rd.Next(0,11));
Console.WriteLine("产生一个0到1之间的浮点数:{0}", rd.NextDouble());
byte[] b = new byte[5];//byte:0-255 sbyte:-128~127
rd.NextBytes(b);
Console.WriteLine("产生的byte类型的值为:");
foreach(byte i in b)
{
Console.Write(i + " ");
}
Console.ReadKey();
}
}
DataTime结构
/*
* C# DataTime结构用于表示时间,所表示的范围是从0001年1月1日点到9999年12月31日24点
* 在DataTime结构中提供了静态属性Now,用于获取当前的日期和事件,如下
* DateTime.Now
*
* 常用的属性和方法用于获取或设置日期和时间
* Date:获取实例的日期部分
* Day:获取该实例所表示的日期是一个月的第几天
* DayOfWeek:获取该实例所表示的日期是一周的星期几
* DayOfYear:获取该实例所表示的日期是一年的第几天
* Add(Timespan value) 在指定的日期实例上添加时间间隔值 value
* AddDays(double value) 在指定的日期实例上添加指定天数 value
* AddHours(double value) 在指定的日期实例上添加指定的小时数 value
* AddMinutes(double value) 在指定的日期实例上添加指定的分钟数 value
* AddSeconds(double value) 在指定的日期实例上添加指定的秒数 value
* AddMonths(int value) 在指定的日期实例上添加指定的月份 value
* AddYears (int value) 在指定的日期实例上添加指定的年份 value
*
* 在使用 DateTime 类中的 Add 方法时需要使用时间间隔类 TimeSpan,该类允许表示的时间间隔范围是 0 到 64 位整数。
*
*
*/
class Program
{
static void Main(string[] args)
{
//【实例】使用 DateTime 类获取当前时间,分别输出该日是当月的第几天、星期几以 及一年中的第几天,并计算 30 天后的日期
DateTime dt = DateTime.Now;
Console.WriteLine("当前日期为:{0}", dt);
Console.WriteLine("当前是本月的第{0}天", dt.Day);
Console.WriteLine("当前是{0}", dt.DayOfWeek);
Console.WriteLine("当前是本年度第{0}天", dt.DayOfYear);
Console.WriteLine("30天后的日期是{0}", dt.AddDays(30));
Console.WriteLine("----------------------------------------------");
//两个日期的差可由时间间隔类 TimeSpan 的对象来存放。假设计算现在距离2021年5月1日劳动节的天数
DateTime dt2 = new DateTime(2021,5,1);
TimeSpan ts = dt2 - dt;
Console.WriteLine("间隔的天数为{0}天", ts.Days);
Console.ReadKey();
}
}
String类
/*
*
* @ 符号:1.取消他在字符中的转义作用 2.将字符串按照原格式输出
*
*
* 1)字符串的不可变性
* 当你给一个字符串重新赋值之后,老值并没有销毁,而是重新开辟了一块空间存储新值
*
* 当程序结束后,GC扫描整个内存,如果发现有的空间没有被指向,则立即把它销毁
*
* 2)我们可以将字符串看做是char类型的一个只读数组。
* ToCharArray();将字符串转换为char数组
* new string(char[] chs):能够将char数组转换了字符串
*
*
* 4、字符串提供的各种方法
1)、Length:获得当前字符串中字符的个数
2)、ToUpper():将字符转换成大写形式
3)、ToLower():将字符串转换成小写形式
4)、Equals(lessonTwo,StringComparison.OrdinalIgnoreCase):比较两个字符串,可以忽略大小写
5)、Split():分割字符串,返回字符串类型的数组。
6)、Substring():截取字符串。在截取的时候包含要截取的那个位置。
7)、IndexOf():判断某个字符串在字符串中第一次出现的位置,如果没有返回-1、值类型和引用类型在内存上存储的地方不一样。
8)、LastIndexOf():判断某个字符串在字符串中最后一次出现的位置,如果没有同样返回-1
9)、StartsWith():判断以....开始
10)、EndsWith():判断以...结束
11)、Replace():将字符串中某个字符串替换成一个新的字符串
12)、Contains():判断某个字符串是否包含指定的字符串
13)、Trim():去掉字符串中前后的空格
14)、TrimEnd():去掉字符串中结尾的空格
15)、TrimStart():去掉字符串中前面的空格
16)、string.IsNullOrEmpty():判断一个字符串是否为空或者为null
17)、string.Join():将数组按照指定的字符串连接,返回一个字符串。
18)、string.Format():格式化字符串
*
*/
class Program
{
static void Main(string[] args)
{
//@ 符号:取消他在字符中的转义作用
string rou = @"E:\net\startstudy";
Console.WriteLine(rou);
//将字符串按照原格式输出
string words = @"今天天气好晴朗,
处处好风光";
Console.WriteLine(words);
//string s1 = "张三";
//string s2 = "张三";
//既然可以将string看做char类型的只读数组,所以我们可以通过下标去访问字符串中的某个元素
string s = "abcdefg";
// s[0] = 'b'; 不能这么做,因为是只读的
//首先将字符串转换为char类型的数组
char[] chs = s.ToCharArray();
chs[0] = 'b';
//将字符数组转换为我们的字符串
s = new string(chs);
Console.WriteLine(s[0]);
Console.WriteLine(s);
//练习一:随机输入你心中想到的一个名字,然后输出它的字符串长度 Length:可以得字符串的长度
//Console.WriteLine("请输入你心中想的那个人的名字");
//string name = Console.ReadLine();
//Console.WriteLine("你心中想的人的名字的长度是{0}",name.Length);
//Console.ReadKey();
//Console.WriteLine("请输入你喜欢的课程");
//string lessonOne = Console.ReadLine();
////将字符串转换成大写
//// lessonOne = lessonOne.ToUpper();
////将字符串转换成小写形式
//// lessonOne = lessonOne.ToLower();
//Console.WriteLine("请输入你喜欢的课程");
//string lessonTwo = Console.ReadLine();
//// lessonTwo = lessonTwo.ToUpper();
//// lessonTwo = lessonTwo.ToLower();
//if (lessonOne.Equals(lessonTwo,StringComparison.OrdinalIgnoreCase))
//{
// Console.WriteLine("你们俩喜欢的课程相同");
//}
//else
//{
// Console.WriteLine("你们俩喜欢的课程不同");
//}
//Console.ReadKey();
//string s = "a b dfd _ + = ,,, fdf ";
////分割字符串Split
//char[] chs = { ' ', '_', '+', '=', ',' };
//string[] str = s.Split(chs,StringSplitOptions.RemoveEmptyEntries);
//Console.ReadKey();
//练习:从日期字符串("2008-08-08")中分割出年、月、日;2008年08月08日。
//让用户输入一个日期格式如:2008-01-02,你输出你输入的日期为2008年1月2日
//string s = "2008-08-08";
//// char[] chs = { '-' };
//string[] date = s.Split(new char[] { '-' }, StringSplitOptions.RemoveEmptyEntries);
//Console.WriteLine("{0}年{1}月{2}日", date[0], date[1], date[2]);
//Console.ReadKey();
//老赵
//string str = "你真的太牛逼了";
//if (str.Contains("牛逼"))
//{
// str = str.Replace("牛逼", "**");
//}
//Console.WriteLine(str);
//Console.ReadKey();
//Substring 截取字符串
//string str = "今天天气好晴朗,处处好风光";
//str = str.Substring(1,2);
//Console.WriteLine(str);
//Console.ReadKey();
//string str = "今天天气好晴朗,处处好风光";
//if (str.EndsWith("风"))
//{
// Console.WriteLine("是的");
//}
//else
//{
// Console.WriteLine("不是的");
//}
//Console.ReadKey();
//string str = "今天天天气好晴朗,天天处天好风光";
//int index = str.IndexOf('哈',2);
//Console.WriteLine(index);
//Console.ReadKey();
//string str = "今天天气好晴朗,处处好风光";
//int index = str.LastIndexOf('天');
//Console.WriteLine(index);
//Console.ReadKey();
////LastIndexOf Substring
string path = @"c:\a\b\c\d\e\f\g\\fd\fd\fdf\d\vfd\加油.wav";
int index = path.LastIndexOf("\\");
path = path.Substring(index + 1);
Console.WriteLine(path);
//Console.ReadKey();
// string str = " hahahah ";
//// str = str.Trim();
// //str = str.TrimStart();
// str = str.TrimEnd();
// Console.Write(str);
// Console.ReadKey();
//string str = "fdsfdsfds";
//if (string.IsNullOrEmpty(str))
//{
// Console.WriteLine("是的");
//}
//else
//{
// Console.WriteLine("不是");
//}
string[] names = { "张三", "李四", "王五", "赵六", "田七" };
////张三|李四|王五|赵六|田七
//string strNew = string.Join("|", "张三","李四","王五","赵六","田七");
string strNew=string.Join("|",names);
Console.WriteLine(strNew);
string Name = "张三";
int Age = 19;
//通过拼接的方式,将字符串和变量拼接成一个长字符串
// string str = "我的名字是" + Name + ",今年" + Age + "岁";
//使用Format()方法,可以使代码简洁
// string str = string.Format("我的名字是{0},今年{1}岁",Name,Age);
//C#引入了内插字符串的语法,使用$"字符串{变量1}字符串{变量2}"
string str = $"我的名字是{Name},今年{Age}岁";
Console.WriteLine(str);
Console.ReadKey();
}
}
StringBuilder类
//String类和StringBuilder类测试
class Program
{
static void Main(string[] args)
{
StringBuilder sb = new StringBuilder();
string str = null;
//创建一个计时器,用来记录程序运行的时间
Stopwatch sw = new Stopwatch();
sw.Start(); //开始计时
for (int i = 0; i < 100000; i++)
{
// str += i;
sb.Append(i);
}
sw.Stop();//结束计时
Console.WriteLine(sw.Elapsed);//测量运行的总时间
Console.WriteLine(sb.ToString());
Console.ReadKey();
}
}
/*当大量进行字符串操作的时候,比如很多次的字符串的拼接操作
* String对象是不可变的,每次使用System.String类中的方法时,都要在内存中创建一个新的字符串对象,这就需要
* 为该新对象分配新的空间,在需要对字符串执行重复修改的情况下,与创建新的String对象相关的系统开销可能会非常大
* 如果要修改字符串不创建新的对象,则可以使用System.Text.StringBuilder类.
* 例如:当在一个循环中将许多字符串连接在一起时,使用StringBuilder类可以提升性能
* StringBuilder != String (将StringBuilder转换为String用ToString())
*
* StringBuilder sb = new StringBuilder();
* sb.Append() 追加字符串
* sb.ToString() //把StringBuilder转换成字符串
* sb.Insert() //插入
* sb.Replace() 替换
* sb.Remove()删除
*
*
*
*/
class Program
{
static void Main(string[] args)
{
StringBuilder sb = new StringBuilder();
sb.Append("张三");
sb.Append("李四");
sb.Append("王五");
sb.Insert(1, 123);
sb.Replace("李四", "李世民");
sb.Remove(1,3);
Console.WriteLine(sb.ToString());
Console.ReadKey();
}
}
正则表达式
/*
* 正则表达式是用来进行文本处理的技术,跟语言无关,在几乎所有的语言中都有实现
* 它是对文本,对字符串操作的
* 一个正则表达式就是由普通字符以及特殊字符(称之为元字符)组成的文字模式
*
* 1.正则表达式元字符
* .表示除\n之外的任意的单个字符
* [] 字符组,任意的单个字符,中括号中的任意一个字符
* a.b
* a[1-9]b
* a[a-zA-Z]b
* a[a-zA-Z0-9]b
* a[axz.]b 当.出现在中括号中的时候,本身就表示一个普通的点.,已经不再是“元字符”了
*
* | 表示或的意思 "或"的优先级非常低,最后才计算
* a(x|y)b
* z|food -> z或者 food
* (z|f)ood -> zood或者food
* () 改变优先级和提取组(分组)
*限定符:
*{n} 表示前面的表达式必须出现n次
*{n,}表示前面的表达式至少出现n次,最多不限
*{n,m}表示至少n次,最多出现m次
*{5,10}
*
* *:表示出现0次或多次。{0,}
* +:表示出现1次或多次。{1,}
* ?:表示0次或1次。 {0,1} 还有另一个意思是:终止贪婪模式
* colou?r ->color colour
* (colou)?r -> colour r
*
* ^与$
*
* ^表示字符串的开始
* ^hello
* a[^0-9a-z]b -> 另外一个意思,代表非
* $表示字符串的结尾
* a$
*
* 2.简写表达式
* \d:表示[0-9]
* \D:表示[^0-9]
* a[0-9]b => a\db
*
* \s 表示所有空白符
* \S:表示\s的反面
*
* \w [a-zA-Z0-9_]
* \W 就是\w的反面
* 由于.net默认采用unicode方式来匹配,所以\w也可以匹配汉字
*
* \b 表示单词的边界
*
* Regex.IsMatch 方法用于判断一个字符串是否匹配正则表达式 (一定不能忘了^和$)
*
*
*
*
*
*/
class Program
{
static void Main(string[] args)
{
#region 案例1
//while (true)
//{
// Console.WriteLine("请输入一个邮政编码");
// string postcode = Console.ReadLine();
// //验证是否是合法的邮政编码
// //IsMatch()表示只要整个字符串中有任何一部分可以匹配,该正则表达式,则返回true.
// // bool b = Regex.IsMatch(postcode, "[0-9]{6}");
// //要求必须是6个数字开头,并且必须是6个数字结尾,所以说就是,必须完全匹配
// // bool b = Regex.IsMatch(postcode, "^[0-9]{6}$");
// //bool b = Regex.IsMatch(postcode, @"^\d{6}$");
// //由于.net默认采用unicode匹配方式,所以\d也匹配全角的数字
// //RegexOptions.ECMAScript表示按照ASCII的方式来匹配
// bool b = Regex.IsMatch(postcode, @"^\d{6}$",RegexOptions.ECMAScript);
// Console.WriteLine(b);
#endregion
#region 案例二
//while (true)
//{
// Console.WriteLine("请输入:");
// string msg = Console.ReadLine();
// bool b = Regex.IsMatch(msg, "z|food");
// //测试时,依次输入:z(true) food(true) zood(true) chinese food,very good(true) zjskjdsjdj(true)
// Console.WriteLine(b);
//}
#endregion
#region 案例三
//while (true)
//{
// Console.WriteLine("请输入:");
// string msg = Console.ReadLine();
// //以z开头或者以food结尾
// bool b = Regex.IsMatch(msg,"^z|food$");
// Console.WriteLine(b);
//}
#endregion
#region 案例四
while (true)
{
Console.WriteLine("请输入:");
string msg = Console.ReadLine();
//要么是z 或者是food
bool b = Regex.IsMatch(msg, "^(z|food)$");
Console.WriteLine(b);
}
#endregion
#region 案例五
//要求用户输入一个整数,匹配是否为>=10并且小于等于20de 数组
while (true)
{
Console.WriteLine("请输入一个10-20之间的数,含10与20");
string msg = Console.ReadLine();
//找规律
bool b = Regex.IsMatch(msg, "^(1[0-9]|20)$");
Console.WriteLine(b);
}
#endregion
Console.ReadKey();
}
}
//正则表达式之Match类和MatchCollection类
class Program
{
static void Main(string[] args)
{
//一个水手出海,想看看他能做些什么
string input = "a sailor went to sea to set ,to see what he could sec ";
//MatchaCollection是Match对象的集合
MatchCollection mc = Regex.Matches(input, @"se\w");
Console.WriteLine($"共找到了{mc.Count}个匹配");
foreach (Match s in mc)
{
Console.WriteLine($"在索引{s.Index}处发现{s.Value}");
}
Console.ReadKey();
}
}