Fork me on GitHub

String与StringBuilder

C#支持两种字符串:规则字符串和逐字字符串。

我先前看到@+“”这种结构处理字符串的时候,也就只是记下怎么用而已,其实这就是标准的逐字字符串,而且分隔符之间的字符逐字解释,唯一例外的就是引号。在逐字字符串中字符串不处理简单转义序列及十六进制和Unicode转义序列,而且可以跨多行。例如:


 

static void Main(string[] args)
        {
            string s = "这个专业\"老师\"太垃圾了!";
            string s1 = @"这个专业""老师""太垃圾了!";
            Console.WriteLine("s-{0}",s1);
            Console.WriteLine("s1-{0}",s1);
            string s2 = @"这个专业
老师
太垃圾了!";
            Console.WriteLine("s2-{0}",s2);
            Console.ReadKey();



String和StringBuilder的不同之处,可以概括为StringBuilder是可变字符序列的类似String类,String我们都知道它是新值新引用,必须分配新的内存。这样当我们多次更改或者连接许多字符串的时候可以使用StringBuilder可以提高性能,先分别演示一下String和StringBuilder的一些有代表性的方法和属性的用法:

using System;

namespace tString
{
    class test
    {
        static void Main()
        {
            //连接字符串演示
            string s1 = "Today is ";
            string s2 = "Tuesday!";
            string s = s1 + s2;
            Console.WriteLine(s);
            Console.WriteLine("等效于: string.Concat(s1,s2) s={0}", string.Concat(s1, s2));
            //逐字访问字符串演示
            Console.WriteLine("逐字访问字符串演示\n法1:");
            foreach (char c in s) //法1
            {
                Console.Write(c + " ");
            }
            Console.WriteLine("\n法2");
            char[] str = s.ToCharArray();//将s中的字符复制到unicode字符数组中
            foreach (char r in str)
            {
                Console.Write(r + " ");
            }
            Console.WriteLine("\n法3");
            for (int i = 0; i < s.Length; i++)//索引起始为0,二不是Unicode字符的位置
            {
                Console.Write(s[i]+" ");
            }
            s = s1 + s2;
            //测试字符的搜索方法
            Console.WriteLine("测试字符的搜索方法");
            Console.WriteLine("与\"Today\"匹配的第一个字符的索引为{0}", s.IndexOf("Today"));
            string target = "ido";//这里注意一下,我也是做实验才发现的,逐字符与target对比
            char[] anyOf = target.ToCharArray();
            int start =0;
            int at;
            at = s.IndexOfAny(anyOf, start);
            if (at > -1)
                Console.WriteLine("s中与\"id\"中匹配的第一个字符的索引为{0}",at);
            else
                Console.WriteLine("(not found)");
            char[] n = { 'i','s'};
            //例如:
            char[] ar = { 'i','s'};
            Console.WriteLine("s中与\"is\"中匹配的第一个字符的索引为{0}", s.IndexOfAny(ar));
            Console.WriteLine("索引0-5对应的子字符串为{0}", s.Substring(0, 5));
            //修改字符串
            Console.WriteLine("修改字符串测试");
            //Insert
            Console.WriteLine("Insert测试");
            Console.WriteLine(s.Insert(17, " What a nice weather!"));
            //PadLeft
            Console.WriteLine("PadLeft测试");
            s = s.PadLeft(s.Length + 8, '♀');
            Console.WriteLine(s);
            //PadRight
            Console.WriteLine("PadRight测试");
            s = s.PadRight(s.Length + 8, '♂');
            Console.WriteLine(s);
            Console.ReadKey();
        }
    }
}

 


 

效果图:由于要限电了只能演示String类了,可以自己研究下StrigBuilder类,和String差不多,几个典型的方法如Append,AppendFormat,ToString.

String与StringBuilder - 脆弱的rohelm - 脆弱的rohelm(C入门历程)
posted @ 2011-11-14 22:50  Halower  阅读(370)  评论(0编辑  收藏  举报