Lession10常用类

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();
        }
    }

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339

推荐阅读更多精彩内容