zoukankan      html  css  js  c++  java
  • 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入门历程)
  • 相关阅读:
    EntityFramework之领域驱动设计实践(二)
    博客园开始对X++语言语法高亮的支持
    一种来源于Microsoft Dynamics AX的权限管理设计思想
    使用InternalsVisibleToAttribute控制internal成员的访问
    EntityFramework之领域驱动设计实践:总结
    EntityFramework之领域驱动设计实践(九)
    EntityFramework之领域驱动设计实践(三)
    EntityFramework之领域驱动设计实践(七)
    EntityFramework之领域驱动设计实践(五)
    EntityFramework之领域驱动设计实践 (一)
  • 原文地址:https://www.cnblogs.com/rohelm/p/2384094.html
Copyright © 2011-2022 走看看