溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C#forUnity快速入門(連載12)-C#的字符串

發(fā)布時間:2020-08-09 21:57:25 來源:網(wǎng)絡(luò) 閱讀:780 作者:Liu_guozhu 欄目:開發(fā)技術(shù)

C# for Unity編程語言快速入門教程(連載12)_C#的字符串


“C#字符串”是一個重要的知識點,對于C#初學者來說有很多重要知識點需要進行學習,總體歸納有三個大的方面:


知識點一:  字符串的常用方法與屬性

屬性:
     Length:           得到字符串的長度
   
方法:    
IsNullOrEmpty()   表示空字符串:
IndexOf()  :           查找指定字符(子字符串)。
SubString():          字符串截取(得到子字符串)
Split():                   截斷字符串。(返回字符串數(shù)組)
Format():              格式化方法
Join():                   (靜態(tài)方法)連接字符串。
Format():              (靜態(tài)方法)格式化字符串
Replace():             替換方法。
Trim();                  剔除字符串兩邊的空格。
parse();                字符串轉(zhuǎn)換基本數(shù)據(jù)類型
tryParse();            字符串轉(zhuǎn)換基本數(shù)據(jù)類型(帶異常處理,更安全)
                         (備注:目前常用字符串與基本數(shù)據(jù)類型的轉(zhuǎn)換用Convert 更多一些)

Remove():          刪除字符串
                 


                 
知識點二: 字符串的“相等性”判斷
   判斷 Equals()  與 ==  的區(qū)別。
   1>  "=="  比較時
       A) 如果比較的是值類型,則比較兩個對象的值。
       B) 如果比較的是引用類型,則比較兩個對象的引用是否相同(堆地址是否相同)。
  

   2> "Equals"比較時
       A) 此方法是Object 里面的一個虛方法,默認是用==進行比較。
       B) 但是,大部分微軟的類,及用戶自定義的類,都重寫了該虛方法。
   



知識點三: 字符串的“駐留性”(不變性、恒定性)
     字符串的“駐留性”意思是字符串一旦定義好,則會在內(nèi)存連續(xù)開辟一個區(qū)域, 當我們用連接操作符("+"),對字符串做“連接”操作時,則舊的字符串不會發(fā)生變化,而是再新開辟一個區(qū)域,把舊的字符串與新的字符串進行連接后,存儲在新的字符串中。
    以上就是字符串“駐留性”的基本原理,我們從這個原理中會自然推導(dǎo)出: 如果大量的字符串做連接,則勢必會造成內(nèi)存空間的大量浪費! 如何解決這個問題呢,微軟公司給我們提供了一個專門處理大量字符串連接的類: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);
            }
        }

        /// <summary>
        /// 反轉(zhuǎn)字符串
        /// </summary>
        /// <param name="strOrignial">原字符串</param>
        /// <returns>反轉(zhuǎn)之后的字符串</returns>
        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;           //字符串的串聯(lián)。
            }
            return strResult;
        }


        /// <summary>
        /// 判斷回文字符串。
        /// </summary>
        /// <param name="str">原始字符串</param>
        /// <returns>
        /// true: 是回文字符串,
        /// false; 不是
        ///  </returns>
        private bool JudgeCircleString(string str)
        {
            //反轉(zhuǎn)之后的結(jié)果
            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;                //反轉(zhuǎn)之后的結(jié)果

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

        //題目3: 請找出1-256中所有的回文數(shù)。
        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;                  //判斷結(jié)果
            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
    {
        /// <summary>
        /// "=="相等性判斷
        /// </summary>
        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");
            }
        }


        /// <summary>
        /// "Equals"相等性判斷
        /// </summary>
        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 主要就是做字符串的“串聯(lián)”使用。
        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();
        }
    }



向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI