数据结构与算法C#语言描述第七章字符串、String类和StringBuilder类

第七章 字符串、String类和StringBuilder

字符串对大多数计算机程序而言是很普骗的,像文字处理软件和网页应用程序这些程序类型都广泛采用了字符串,这使得处理这类应用程序的程序员在字符串处理的效率问题上需要花费额外的心思。

7.1 String类的应用

C#语言中的字符串具有精神分裂的天性,即字符串既是本地类型又是类的对象。实际上更准确的说法应该是可以把字符串作为本地数据值来使用,但是事实上每个产生的字符串都是String类的一个对象,稍后会说明原因。

7.1.1 创建String 的对象

7.1.2 常用的String 类的方法

虽然对字符串可以执行许多操作,但是只有几个操作时最常用的,其中三个最常用的操作分别是:找到字符串的子串;确定字符串的长度和确定字符在字符串中的位置。

    class Chapter7

    {

        static void Main()

        {

            string string1 = "Hello world!";

            int len = string1.Length;

            int pos = string1.IndexOf(" ");

            string firstWord, secondWord;

            firstWord = string1.Substring(0, pos);

            secondWord = string1.Substring(pos + 1, (len - 1) - (pos + 1));

            Console.WriteLine("First word:" + firstWord);

            Console.WriteLine("Second word:" + secondWord);

            Console.Read();

        }

    }

虽然这段程序很有趣,但是它不是很实用。实际需要的程序该是可以从任意长度的符合格式短语中抽离出单词。我们可以用几种不同的算法来实现。

   class Chapter7

    {

        static void Main()

        {

            string astring = "Now is the time for all good people s";

 

            ArrayList words = new ArrayList();

            words = SplitWords(astring);

            foreach (string word in words)

                Console.Write(word + " ");

            Console.Read();

        }

        static ArrayList SplitWords(string astring)

        {

            //string[] ws = new string[astring.Length - 1];

            ArrayList words = new ArrayList();

            int pos;

            string word;

            pos = astring.IndexOf(" ");

            while (pos > 0)

            {

                word = astring.Substring(0, pos);

                words.Add(word);

                astring = astring.Substring(pos + 1, astring.Length - (pos + 1));

                pos = astring.IndexOf(" ");

                if (pos ==-1)

                {

                    word = astring.Substring(0, astring.Length);

                    words.Add(word);

                }

            }

            return words;

        }

    }

7.1.3 Split 方法和Join 方法

            string data = "Now,is,the,time";

            string[] sdata;

            char[] delimiter = new char[] { ',' };

            sdata = data.Split(delimiter, data.Length);

            foreach (string word in sdata)

                Console.Write(word + " ");

            string joined;

            joined = String.Join(",", sdata);

            Console.WriteLine();

            Console.Write(joined);

7.1.4 比较字符串的方法

CompareTo CompareStartsWithEndWith 方法

7.1.5 处理字符串的方法

InsertRemoveReplacePadLeft PadRightToLowerToUpperTrim TrimEnd方法

7.2 StringBuilder

StringBuilder类提供了对多变的String对象的存取。String类的对象是不变的,这就意味着不能对他们进行改变。在System.text名字域中可以找到StringBuilder

7.3 String类与StringBuilder的性能比较

String对象是不可变的,而StringBuilder对象则不是这样的。当然我们有理由相信StringBuilder类是更加高效的,但是,人们不是总会使用StringBuilder类的,这是因为StringBuilder类缺少几种能够合理有效进行字符串处理的方法。事实是需要使用String方法的时候可以把stringBuilder对象转换成String对象。

using System;

using System.Text;

using System.Diagnostics;

namespace _1

{

    class Timing

    {

        TimeSpan duration;

        public Timing()

        {

            duration = new TimeSpan(0);

        }

        public void stopTime()

        {

            duration = Process.GetCurrentProcess().TotalProcessorTime;

        }

        public void startTime()

        {

            GC.Collect();

            GC.WaitForPendingFinalizers();

        }

        public TimeSpan Result()

        {

            return duration;

        }

    }

    class Chapter7

    {

        static void Main()

        {

            int size = 100;

            Timing timeSB = new Timing();

            Timing timeST = new Timing();

            Console.WriteLine();

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

            {

                timeSB.startTime();

                BuildSB(size);

                timeSB.stopTime();

                timeST.startTime();

                BuildString(size);

                timeST.stopTime();

                Console.WriteLine("Time(in milliseconds) to build StringBuilder" + "Object for" + size + "elements:" + timeSB.Result().TotalMilliseconds);

                Console.WriteLine("Time(in milliseconds) to build String" + "Object for" + size + "elements:" + timeST.Result().TotalMilliseconds);

                Console.WriteLine();

                size *= 10;

            }

          }

        static void BuildSB(int size)

        {

            StringBuilder sbObject = new StringBuilder();

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

                sbObject.Append("a");

        }

        static void BuildString(int size)

        {

            string stringObject = " ";

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

                stringObject += "a";

        }

    }

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值