C#forUnity快速入门(连载12)-C#的字符串-创新互联

C# for Unity编程语言快速入门教程(连载12)_C#的字符串

成都创新互联从2013年开始,先为松滋等服务建站,松滋等地企业,进行企业商务咨询服务。为松滋企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

“C#字符串”是一个重要的知识点,对于C#初学者来说有很多重要知识点需要进行学习,总体归纳有三个大的方面:

知识点一: 字符串的常用方法与属性

属性:
   Length:          得到字符串的长度

方法:
IsNullOrEmpty()  表示空字符串:
IndexOf() :          查找指定字符(子字符串)。
SubString():         字符串截取(得到子字符串)
Split():             截断字符串。(返回字符串数组)
Format():             格式化方法
Join():             (静态方法)连接字符串。
Format():            (静态方法)格式化字符串
Replace():         替换方法。
Trim();                 剔除字符串两边的空格。
parse();               字符串转换基本数据类型
tryParse();           字符串转换基本数据类型(带异常处理,更安全)
                    (备注:目前常用字符串与基本数据类型的转换用Convert 更多一些)

Remove():      删除字符串

知识点二: 字符串的“相等性”判断
  判断 Equals() 与 == 的区别。
  1> "==" 比较时
      A) 如果比较的是值类型,则比较两个对象的值。
      B) 如果比较的是引用类型,则比较两个对象的引用是否相同(堆地址是否相同)。

  2> "Equals"比较时
      A) 此方法是Object 里面的一个虚方法,默认是用==进行比较。
      B) 但是,大部分微软的类,及用户自定义的类,都重写了该虚方法。

知识点三: 字符串的“驻留性”(不变性、恒定性)
    字符串的“驻留性”意思是字符串一旦定义好,则会在内存连续开辟一个区域, 当我们用连接操作符("+"),对字符串做“连接”操作时,则旧的字符串不会发生变化,而是再新开辟一个区域,把旧的字符串与新的字符串进行连接后,存储在新的字符串中。
   以上就是字符串“驻留性”的基本原理,我们从这个原理中会自然推导出: 如果大量的字符串做连接,则势必会造成内存空间的大量浪费! 如何解决这个问题呢,微软公司给我们提供了一个专门处理大量字符串连接的类:StringBuilder

针对以上知识点,提供如下示例,供大家参考。

知识点一(字符串常用方法与属性)部分习题与参考答案:

  class Demo1
   {

       //题目1: 输入若干个字符,然后按照相反的次序输出,
       //例如输入: Hello everyone ,输出 enoyreve olleH
       public void Test1()
       {
           string str = "Hello everyone";

           //for (int i = 0; i < str.Length; i++)
           for (int i = str.Length-1; i>=0; i--)
           {
               string strTemp=str.Substring(i,1);
               Console.Write(strTemp);
           }
       }

       ///


       /// 反转字符串
       ///

       /// 原字符串
       /// 反转之后的字符串
       private string ReverseString(string strOrignial)
       {
           string strResult=null;                        //返回之后的返回字符串

           for (int i = strOrignial.Length - 1; i >= 0; i--)
           {
               string strTemp = strOrignial.Substring(i, 1);
               strResult = strResult + strTemp;          //字符串的串联。
           }
           return strResult;
       }

       ///
       /// 判断回文字符串。
       ///

       /// 原始字符串
       ///
       /// true: 是回文字符串,
       /// false; 不是
       /// 

       private bool JudgeCircleString(string str)
       {
           //反转之后的结果
           string strReverseResult = null;

           strReverseResult = ReverseString(str);
           if (strReverseResult == str)
           {
               return true;
           }
           else
           {
               return false;
           }
       }

       //题目2: 判断回文字符串。
       //例如: rotor 就是回文字符串。
       public void Test2()
       {
           string str = "AbcdcbA";
           string strReverseResult = null;               //反转之后的结果

           strReverseResult=ReverseString(str);
           if (strReverseResult == str)
           {
               Console.WriteLine("是回文字符串");
           }
           else {
               Console.WriteLine("不是回文字符串");
           }
       }

       //题目3: 请找出1-256中所有的回文数。
       public void Test3()
       {
           for (int i = 1; i <=256; i++)
           {
               bool boolResult=JudgeCircleString(i.ToString());
               if (boolResult)
               {
                   Console.WriteLine(i);
               }
           }
       }

       //题目4: 写一个方法,对给定的Emall 字符串做检验。
       //  要求: 1)要求字符串中包含“@”字符与“.”字符。
       //         2)要求字符串中@ 字符在 . 字符之前。
       public bool JudgeEmall(string emall)
       {
           bool boolJudgeResult = false;                 //判断结果
           int intIndexPosionAt = -1;                    //@字符在字符串的位置
           int intIndexPosionDot = -1;                   //"."字符在字符串中的位置

           intIndexPosionAt = emall.IndexOf("@");
           intIndexPosionDot = emall.IndexOf(".");

           if (intIndexPosionAt != -1 && intIndexPosionDot!=-1)
           {
               if (intIndexPosionAt < intIndexPosionDot)
               {
                   boolJudgeResult = true;
               }
           }

           return boolJudgeResult;
       }

       public static void Main()
       {
           Demo1 obj = new Demo1();
           bool boolResult=obj.JudgeEmall("zhangsan@yahoo.com");
           if (boolResult)
           {
               Console.WriteLine("合法Emall");
           }else{
               Console.WriteLine("不合法");
           }
       }
   }

知识点二(字符串的“相等性”判断)部分习题与参考答案:

   public class Person
   {
       string name;
       int age;

       public Person(string strName ,int intAge)
       {
           name = strName;
           age = intAge;
       }

       public override bool Equals(object obj)
       {
           Person anotherPer = obj as Person;
           if(this.name==anotherPer.name && this.age==anotherPer.age)
           {
               return true;
           }else{
               return false;
           }
       }
   }

   class Demo2
   {
       ///


       /// "=="相等性判断
       ///

       public void Test1()
       {
           Person p1 = new Person("小龙女",25);
           Person p2 = new Person("范冰冰", 25);
           if(p1==p2)
           {
               Console.WriteLine("p1==p2");
           }else{
               Console.WriteLine("p1!=p2");
           }
       }

       ///


       /// "Equals"相等性判断
       ///

       public void Test2()
       {
           Person p1 = new Person("小龙女", 25);
           Person p2 = new Person("小龙女", 25);
           if (p1.Equals(p2))
           {
               Console.WriteLine("p1 等于 p2");
           }
           else
           {
               Console.WriteLine("p1 不等于 p2");
           }
       }
   }

知识点三(字符串的“驻留性”)部分习题与参考答案:

   class Demo3
   {

       //学习字符串的“恒定性”
       public void Test0()
       {
           string str1 = "李冰冰";
           string str2 = "范冰冰";
           string str3 = "李冰冰";
           string str4 = "李冰冰" + "范冰冰";
           string str5 = str1 + str2;
           string str6 = "李冰冰范冰冰";

           Console.WriteLine(str1==str2);//F
           Console.WriteLine(str1==str3);//T 如何理解呢?
           Console.WriteLine(str4==str5);//T
           //比较地址引用是否相同
           Console.WriteLine(string.ReferenceEquals(str4,str5));//F
           Console.WriteLine(string.ReferenceEquals(str4, str6));//T ??
           Console.WriteLine(string.ReferenceEquals(str5, str6));//F
       }

      //演示为什么需要学习StringBuder。 即:string 存在的问题。
       public void Test1()
       {
           string str = "大家上午";

           str=str+"好!";
           str = str + "a";
           str = str + "b";
           str = str + "c";
           Console.WriteLine("str="+str);
       }

       //StringBuider 主要就是做字符串的“串联”使用。
       public void TestStringBuilder()
       {
           StringBuilder sbu = new StringBuilder();
           sbu.Append("大家上午");
           sbu.Append("好!");
           sbu.Append("a");
           sbu.Append("b");
           sbu.Append("c");
           sbu.Insert(2,"ABC");
           Console.WriteLine(sbu.ToString());
       }

       static void Main1(string[] args)
       {
           Program obj = new Program();
           obj.TestStringBuilder();
       }
   }

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享名称:C#forUnity快速入门(连载12)-C#的字符串-创新互联
网站URL:http://ybzwz.com/article/cdihii.html