• 数据结构 C#描述 第七章 第二部分


    下面又是一个说明怎样排列数组中数据的问题:

     

    using System;

     

    public class Chapter7

    {

        static void Main()

        {

            string[,] names = new string[,]

            {

                {"1054","Mary","Ella","Steve","Bob"},

                {"1133","John","Alex","David","Joe"},

                {"2624","Jole","Chris","Craig","Bill"}

            };

     

            Console.WriteLine();

            Console.WriteLine();

     

            for (int outer = 0; outer <= names.GetUpperBound(0); outer++)

            {

                for (int inner = 0; inner <= names.GetUpperBound(1); inner++)

                {

                    Console.Write(names[outer, inner] + " ");

                }

                Console.WriteLine();

            }

            Console.WriteLine();

            Console.WriteLine();

     

            for (int outer = 0; outer <= names.GetUpperBound(0); outer++)

            {

                for (int inner = 0; inner <= names.GetUpperBound(1); inner++)

                {

                    Console.Write(names[outer, inner].PadRight(10) + "   ");

                }

                Console.WriteLine();

     

            }

           

        }

     

    }

     

     

         

     

     我们现在还看看字符串的拼接操作-Concat。这个方法要求传入一些字符串对象,然后返回拼接后的字符串。代码如下:

    using System;

     

    public class Chapter7

    {

        static void Main()

        {

     

            string s1 = "hello";

            string s2 = "world";

            string s3 = "";

            s3 = String.Concat(s1, " ", s2);

            Console.WriteLine(s3);

           

        }

    }

     

     

     

          我们还可以把字符从大写转换为小写,也可以进行小写转换大写的操作,这些就要用到ToLowerToUpper方法。代码片段如下:

         

    using System;

     

    public class Chapter7

    {

        static void Main()

        {

     

            string s1 = "hello";

            s1 = s1.ToUpper();

            Console.WriteLine(s1);

            string s2 = "WORD";

            Console.WriteLine(s2.ToLower());

     

           

        }

    }

     

     

     

     

          下面我们将用Trim方法和TrimEnd方法的讨论来介绍本小节。当我们与字符串打交道的时候,有时候在字符串的前面或者后面有多余的空格。Trim方法和TrimEnd会将字符串前后的空格删除。你还可以定义一个单个的字符或者数组,如果这个定义的字符或者数组在串中找到,就将之删除。代码如下:(注意:数组定义每项中的空格

    using System;

     

    public class Chapter7

    {

        static void Main()

        {

            string[] names = new string[] { "David", "  Jim", "Mike  ", "Xiaoyan  " };

            Console.WriteLine();

            ShowNames(names);

            Console.WriteLine();

            TrimVals(names);

            Console.WriteLine();

            ShowNames(names);

     

        }

     

        static void ShowNames(string[] arr)

        {

            for (int i = 0; i <= arr.GetUpperBound(0); i++)

                Console.Write(arr[i]);

        }

     

        static void TrimVals(string[] arr)

        {

            char[] charArr = new char[] { ' ' };

            for (int i = 0; i <= arr.GetUpperBound(0); i++)

            {

                arr[i] = arr[i].Trim(charArr[0]);

                arr[i] = arr[i].TrimEnd(charArr[0]);

            }

        }

    }

     

     

    结果如下:

     

     

     

    大家在调试这段代码的时候,可以分别将

     

    arr[i] = arr[i].Trim(charArr[0]);

                arr[i] = arr[i].TrimEnd(charArr[0]);

          可以将这两句中的任意一句注释掉,然后比较TrimTrimEnd的效果!

     

    首先注释上一句:结果显示如下:

     

     

     

     

     

          注释后一句:

     

     

     

     

     

          下面还有一个关于HTML注释的代码:

         

     

    using System;

     

    public class Chapter7

    {

        static void Main()

        {

            string[] htmlComments = new string[]

            {

                "<--Start Page Number Functino-->",

                "<--Get user name and passward-->",

                "<--End Title page-->",

                "<--End Script-->"

     

            };

     

            char[] commentsChars = new char[] { '<', '!', '-', '>' };

     

            for (int i = 0; i <= htmlComments.GetUpperBound(0); i++)

            {

                htmlComments[i] = htmlComments[i].Trim(commentsChars);

                htmlComments[i] = htmlComments[i].TrimEnd(commentsChars);

            }

     

            for (int i = 0; i <= htmlComments.GetUpperBound(0); i++)

                Console.WriteLine("Comment: " + htmlComments[i]);

           

     

           

        }

    }

     

     

    显示如下:

     

     

     

     

    StringBuilder

     

    StringBuilder类支持可变的字符串对象。String对象是不可以改变的的,这就是说,一旦某个字符串被定义,以后它 就不再改变。你每次给那个已经定义了的字符串的操作,实际都没有改变它的值。你每次对它的操作都是在创建一个新的字符串对象,然后将操作后的值赋值给新的串,但是原来的串没有变。例如:

    .string name=”xiaoyan”;

    .string newName=name.ToLower();

    当你输出name的值,发现name的值还是“xiaoyan”。

          从另一方面来说,StringBuilder对象是可以变的。当你对创建的StingBuilder对象改变时,你就真的改变了它。本节中我们将会讨论StringBuilder 在你程序中的用法。并且我们在结束本章的时候还会将StringBuilder类和Sting类做运行效率的比较

          StringBuilder在名称空间System.Text下,在你用它的时候,先要导入名称空间。

         

    构造StringBuilder对象

     

          你可以用三种方式来构造一个StringBuilder .。首先,可以这样:

                 StringBuilder stBuff=new StringBuilder();

     

          这个构造函数创建的stBuff对象的容量是16,即可以容纳16字符的串。这个容量是默认分配的,但是也可以自己定义初始的大小:

          StringBuilder stBuff2=new StringBuilder(25);

          这一行代码就申明了初始容量为25的对象。最后的一种方式如下:

          StringBuilder stBuff3=new StringBuilder(“Hello,Wolrd”);

     

    这个对象的初始容量也是16.如果传入的参数的长度大于16,那么容量就会增至32。每次StringBuilder对象的容量不够时,就会自动的增加16

         

     

    获取和设置StringBuilder对象

     

          StringBuilder 中有很多的属性可以用来获取StringBuilder的对象的信息。Length属性说明了一个StringBuilder对象实例中的字符的个数,而Capacity属性返回StringBuilder对象实例的现有的容量。MaxCapacity属性返回一个StringBuilder对象实例中最大允许装入的字符个数。

         

     

          下面的代码段就告诉我们怎样用这些属性:

          

            StringBuilder stBuff = new StringBuilder("Xiao yang");

            Console.WriteLine("The length of stBuff is: " + stBuff.Length);

            Console.WriteLine("Capacity of stBuff is: " + stBuff.Capacity);

            Console.WriteLine("MaxNum capacity of stBuff is: " + stBuff.MaxCapacity);

     

    显示结果如下:

     

     当然,你还可以设置一个StringBuilder对象实例的长度:

    stBuff.Length = 7;

            Console.WriteLine(stBuff);

     

     结果为”Xiao ya”

     

          为了保证StringBuilder对象的实例有一个符合天骄的最小的容量,你可以用EnsureCapacity方法,方法要传入一个整数:

          stBuff.EnsureCapacity(25);

     

          

     

     

     

    修改 StringBuilder对象

          我们可以通过把字符串插入,,移除,替换或者在一个StringBuilder 对象的结尾拼接另外的串来改变现有的对象。

          你可以用Append方法来将一些字符连接到现有的StringBuilder对象实例的后面。这个方法要求传入一个字符串为参数。代码如下:

         

    using System;

    using System.Text;

     

    public class Chapter7

    {

        static void Main()

        {

            StringBuilder stBuff = new StringBuilder();

            string[] words=new string[]{

                "now"," is"," the" ," time"," for",

                " all" ," good"," man",

                 " to"," come"," to",

                 " see"," my"," blog"

            };

     

            for (int i = 0; i <= words.GetUpperBound(0); i++)

                stBuff.Append(words[i]);

            Console.WriteLine( stBuff);

           

        }

    }

     

     

    下一个要说的方法是Insert方法。这个方法可以使得我们将一个串插入到现有的StringBuilder对象中。这个方法要传入三个参数。第一个参数标明要插入的位置,第二个参数是你想插入的串,第三个参数是个可选项,标明你想把这个串插入多少次。

       代码如下:

      

    using System;

    using System.Text;

     

    public class Chapter7

    {

        static void Main()

        {

            StringBuilder stBuff = new StringBuilder();

            stBuff.Insert(0, "Hello");

            stBuff.Append("world");

            stBuff.Insert(5, " ");

            Console.WriteLine(stBuff);

     

     

     

           

        }

         

     

    结果为Hello world

     

    再看看下面的代码:

    StringBuilder stBuff = New StringBuilder();

    stBuff.Insert(0, "and on ", 6);

    Console.WriteLine(stBuff);

    结果为

    and on and on and on and on and on and on

     

     

          StringBuilder类还有Remove方法,用来移除StringBuilder对象中的字符。这个方法要两个参数:起始位置,字符个数

    StringBuilder stBuff = New StringBuilder("noise in

    +++++string");

    stBuff.Remove(9, 5);

    Console.WriteLine(stBuff);

    结果如下:

     

    noise in string

     

          你还可以替换StringBuilder 对象中的一些字符,用 Repalce方法。方法要两个参数:被替换的字符,替换的新的字符。代码如下:

                         StringBuilder stBuff = New StringBuilder("recieve _

    decieve reciept");

    stBuff.Replace("cie", "cei")

     

     

          当我们与StringBuilder对象打交道的时候,可能要将StringBuilder对象转换为一个字符串,你可以用toString方法。这个方法把 StringBuilder对象的实例以一个字符串的形式返回。

          代码如下:

     

     

     

           using System;

    using System.Text;

     

    public class Chapter7

    {

        static void Main()

        {

            StringBuilder stBuff = new StringBuilder("HELLO WORLD");

     

            Console.WriteLine(stBuff.ToString());   

     

            

        }

    }

     

     

     

    比较String StringBuilder

          比较两个对象用法很简单,关键是要记住,String类创建出的对象是不变,而StringBuilder的对象是可以变的。看个例子:

    using System;

    using System.Text;

     

    public class Chapter7

    {

        static void Main()

        {

            string astring = "";

            StringBuilder sb = new StringBuilder();

     

            for (int i = 0; i < 1000; i++)

            {

                astring += i;

                sb.Append(i);

            }

     

            Console.WriteLine(astring);

            Console.WriteLine(sb.ToString());

           

           

     

     

     

           

        }

    }

     

     

     

     

    分析就知道,用StringBuilder对象时,从头到尾只是用创建一个sb 的对象和1000个数字对象,而用string的那个,确创建了1000个字符的数字对象,1000个数字对象,可以想下,哪个的效率高?!

     

    小洋,燕洋天
  • 相关阅读:
    SVN自动更新测试服务器工作副本(C#写winform程序实现)
    两台服务器上SQL Server数据库数据互操作示例
    ASP.NET根据URL生成网页缩略图示例程序(C#语言)
    Flutter Widget API
    BPM、BPMN、BPMN2.0概念介绍
    H5多图上传调研
    lIUNX如何加载U盘,光盘
    如何解决exchange2003被中继的问题?(网上转载)
    window无法安装服务
    如何在WORD里面插入不同的页眉和页脚
  • 原文地址:https://www.cnblogs.com/yanyangtian/p/1262668.html
Copyright © 2020-2023  润新知