C# .net 字符串格式化,正则表达式,字符串操作


代码没怎么整理,看起来有点乱,是自己看书时的调试代码,要点都在代码的注释上了,对初学者会很有帮助的。

 


        class days
        {
            public int Hight, low;
            public days(){ }
            public days(int ht,int low)
            {
                this.Hight = ht;
                this.low = low;
            }
            public int Average()
            { 
                return (Hight+low)/2;
            }
        } 
        class Person
        {
            private string Name;
            public Person() { }
            public Person(string name) { this.Name = name; }
        }
        
        static void Main(string[] args)
        {
            #region days 先执行构造函数,再用对象初始化列表中的值进行覆盖
            /*
            days days1 = new days(6, 4) { Hight = 10, low = 20 };
            //days days1 = new days { Hight = 10, low = 20 };
            //days days1 = new days(6, 4) { low = 20 };
            //days1.Hight = 50;
            //days1.low = 30;
            Console.WriteLine("Hight={0},low={1},Average={2}", days1.Hight, days1.low, days1.Average());
            Console.ReadLine();
             */
            #endregion
            #region 相等性比较 引用类型和值类型的不同,数组的特殊性
            /*
            int inta =3;
            int intb =3;
            Console.WriteLine(inta == intb);
            Console.WriteLine(inta.Equals(intb));


            string a = new string(new char[] { 'h', 'e', 'l', 'l', 'o' });
            string b = new string(new char[] { 'h', 'e', 'l', 'l', 'o' });
            Console.WriteLine(a == b);
            Console.WriteLine(a.Equals(b));


            object g = a;
            object h = b;
            Console.WriteLine(g == h);
            Console.WriteLine(g.Equals(h));


            Person p1 = new Person("jia");
            Person p2 = new Person("jia");
            Console.WriteLine(p1 == p2);
            Console.WriteLine(p1.Equals(p2));




            Person p3 = new Person("jia");
            Person p4 = p3;
            Console.WriteLine(p3 == p4);
            Console.WriteLine(p3.Equals(p4));


            Console.ReadLine();
             */
            #endregion


            #region 字符串常见操作 
            
           
            string newline=Environment.NewLine;//系统中的换行符\r\n;            
            string str = "中国";
            int len = str.Length;
            Console.WriteLine("字符串\"中国\"的长度是{0}", len);
            //Console.ReadLine();


            byte[] bytestr = Encoding.Default.GetBytes(str);
            len = bytestr.Length;
            Console.WriteLine("字符串\"中国\"的byte长度是:"+newline+"{0}", len);
            //Console.ReadLine();


            StringBuilder sb = new StringBuilder();            
            sb.Append("你好,");
            sb.Append("中国!");
            Console.WriteLine("sb是:{0}", sb);
            
            Console.WriteLine("sb的第二个字是:{0}", sb.ToString().Substring(1,1));//把sb转换为字符类型;


            // 注意:Console.WriteLine()调用string.format();对类似于{0:00}格式化的说明;
            Console.WriteLine(@"对{0:00}应用的说明");
            Console.WriteLine("111的格式化字符串是:lsh{0:00}", 111);
            Console.WriteLine("11的格式化字符串是:lsh{0:00}", 11);
            Console.WriteLine("1的格式化字符串是:lsh{0:00}", 1);


            Console.WriteLine("111的格式化字符串是:lsh{0,15}", "111");
            Console.WriteLine("11的格式化字符串是:lsh{0,-15}", "11");
            Console.WriteLine("1的格式化字符串是:lsh{0,15}", "1");


            string sabc = "321234567890";
            Console.WriteLine("|{0,10}|", "abc123");
            Console.WriteLine("|{0,-10}|", "abc123");
            Console.WriteLine("|{0,10}|", "ab12");
            Console.WriteLine("|{0,-10}|", "ab12");


            double avalue = 321234567890;
            //string avs= avalue.ToString("#") + "\n";
            // Displays 1234567890
            string strFT = "#(###) ###-####";
            string avsft = avalue.ToString(strFT);//输出:(32123) 456-7890
            Console.WriteLine("1234567890是:{0}", avsft);
            int avalueint = 12345678;
            Console.WriteLine("12345678用n格式化是:{0:N}", avalueint);


            //string stringFTR = string.Format("|{0:#(###) ###-####}|", avalue);
            string stringFTR = string.Format("|{0,22:#(###) ###-####}|", avalue);
            string stringFTR0 = string.Format("|{0,22:0(000) 000-0000}|", avalue);
            //string stringFTR0 = string.Format("|{0,22:0(000) 000-0000}|", avalue);
            string stringFTL = string.Format("|{0,-2}|", avalue);
            Console.WriteLine("stringFTR:{0}", stringFTR);
            Console.WriteLine("stringFTR:{0}", stringFTR0);
            Console.WriteLine("stringFTL:{0}", stringFTL);


            char ISP = char.Parse(strFT.Substring(1, 1));//转换为char类型            
            Console.WriteLine("A:{0}", char.IsPunctuation(ISP));//判断是否为标点


            //中文字符与整形数值的转换
            int zhong=(int)'中';
            Console.WriteLine("中转换为int:{0}", zhong);
            char tozhong = (char)20013;
            Console.WriteLine("20013可以转换为中文:{0}", tozhong);


            //Trim(),TrimEnd()的用法;理解的关键:最后生成的字符串不以字符数组中的字符结尾(or/and)开始,而不管原字符串以几个字符数组中的字符结尾;
            string strSPC = " 中 国 的 的 国,铁";
            char[] delchar = { '的', ' ', '国' };//
            string str_spc = strSPC.TrimEnd(' ').TrimEnd('国').TrimEnd(' '); //去掉右边的空格,注意是',不是"
            
                //string str_spc = strSPC.TrimEnd(delchar);
                //string str_spc = strSPC.Trim(delchar);//
            //string str_spc = strSPC.Trim();//去掉两边的空格
            //string str_spc = strSPC.Replace(" ", "");//去掉所有的空格            
            Console.WriteLine("{0}去掉空格后是:{1}", strSPC,  "1"+str_spc + "1");


            //split()的用法,
            string strSPC2 = " 1 2 3  4 5,,6aaa7 js8,9  js";//当有连续的空格时,空格也会存入数组,这很可能不是期望的结果;
            string[] strspt = strSPC2.Trim().Split(' ', ',');//推荐的写法,用空格和逗号作为分割符,
            //以下是一些其它的写法,区别主要在字符数组的构建上.
            //string[] strspt = strSPC2.Trim().Split(new char[]{' ', ','});//匿名数组?            
            //string[] strspt = strSPC2.Trim().Split(' ');//只用空格作为分割符,最后的字符串是"5,6"
            //char[] sptchar = { ' ', ',' };
            //char[] sptchar =new char[] { ' ', ',' };
            //string[] strspt = strSPC2.Trim().Split(sptchar);            
            foreach (string item in strspt)
            {                
                Console.WriteLine("strspt中的字符依次是:{0}", item);
                
            }
            Console.WriteLine("--------------------------------------------");
            Console.WriteLine("正则表达式分割字符串,也可以直接用它获取需要的部分");
            Console.WriteLine("--------------------------------------------");
            string[] words = Regex.Split(strSPC2.Trim(), @"[ ]+|[,]+|[js]|[a]+");//Trim()去掉两端的空格,不然---;用连续的空格和逗号作为分割符;" js"处出错


            foreach (string item in words)
            {
                Console.WriteLine("strspt中的字符依次是:{0}", item);


            }


            //解决" js"处出错的思路,第一种情况:js在开头或结尾时,要去掉js,但是不好操作,可以先把js替换成",",然后用trim();第二种情况:形如"  "和"js"相连时,都替换成",",然后用"[,]+"分割;综合以上两种情况,就是替换>trim>split;
            //代码实现:strSPC2 = " 1 2 3  4 5,,6aaa7 js8,9  js"
            Console.WriteLine("---------------------对  js的处理--------------------------------");
            Regex regex = new Regex("[ ]+|[,]+|[js]|[a]+");
            string regstr = regex.Replace(strSPC2, ",");
            //words = Regex.Split(regstr.Trim(','), ",");//Trim()去掉两端的空格,不然---;用连续的空格和逗号作为分割符;" js"处出错
            words = Regex.Split(regstr.Trim(','), @"[,]+");//在此处@可以省略
            foreach (string item in words)
            {
                Console.WriteLine("strspt中的字符依次是:{0}", item);
            }
            Console.ReadLine();
            
            #region 直接用正则表达式从字符串中提取数字
            //Console.WriteLine("---------------------直接用正则表达式从字符串中提取数字------------------");
            //string strSP4 = " 1 2 3  4 5,,6aaa7 js8,9  js";
            //Regex reg4 = new Regex(@"\d+",RegexOptions.IgnoreCase);
            //MatchCollection MCS = reg4.Matches(strSP4);
            //foreach (Match item in MCS)
            //{
            //    Console.WriteLine("匹配的项:"+item);
            //}
            #endregion




            #region 正则表达式 示例
            /*
            //要匹配的字符串   
            string text = "1A5M16N 2B 3C 4D 5E 6F 7G 8H 9I 10J 11Q 12J 13K 14L 15M 16N ffee80 #800080";
            //正则表达式   
            //string pattern = @"((\d+)([a-z]))\s+";
            //string pattern = @"((\d+)(\S+)([a-z]+))";
            string pattern = @"((\d+)([a-z]+))+";
            //使用RegexOptions.IgnoreCase枚举值表示不区分大小写   
            Regex r = new Regex(pattern, RegexOptions.IgnoreCase);
            //使用正则表达式匹配字符串,返回所有的匹配结果   
            MatchCollection matchCollection = r.Matches(text);
            foreach (Match m in matchCollection)
            {
                //显示匹配开始处的索引值和匹配到的值   
                System.Console.WriteLine("Match=[" + m + "]");//m就是我们期望的值,注意:贪婪匹配
                //CaptureCollection cc = m.Captures;
                //foreach (Capture c in cc)
                //{
                //    Console.WriteLine("\tCapture=[" + c + "]");
                //}
                //for (int i = 0; i < m.Groups.Count; i++)
                //{
                //    Group group = m.Groups[i];
                //    System.Console.WriteLine("\t\tGroups[{0}]=[{1}]", i, group);
                //    for (int j = 0; j < group.Captures.Count; j++)
                //    {
                //        Capture capture = group.Captures[j];
                //        Console.WriteLine("\t\t\tCaptures[{0}]=[{1}]", j, capture);
                //    }
                //}
            }
            */
            #endregion


             #region 整形向字符类型的
            //int ii = 5;
            //string stt = ii + "sss";
            //Console.WriteLine("int+string={0}", stt);


            //Console.ReadLine();
            */
             #endregion


            #endregion      


            #region StringBuilder的用法
            /*
            StringBuilder sb = new StringBuilder();
            Console.WriteLine(sb.Capacity + "\t" + sb.Length + "\t" + sb);
            sb.Append('a', 17);           
            Console.WriteLine(sb.Capacity + "\t" + sb.Length + "\t" + sb);
            sb.Append('a', 118);//46,47,48,78,98
            Console.WriteLine(sb.Capacity + "\t" + sb.Length + "\t" + sb);
            
            Console.ReadLine();
             
             */
            #endregion

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页