筆記6 字符串、單例

char(賦值用單引號)

單獨字符

            //char代表單獨的字符類型    
            char c = 'i';      //賦值用單引號

字符串(麻煩)

char[] ar = { 'h', 'e', 'l', 'l', 'o' };

由於用char寫字符串太麻煩,於是出現一個新類型來處理字符串——string。

string字符串(賦值用雙引號)

所有的對象怎麼創建的?都是“new 類();”這樣創建的。
只有字符串相當於比較特殊的類。“hello”相當於new了一個對象。

string str = "hello";      
//string它本身也是個類。所以寫出“hello”,也相當於創建了一個字符串的對象。           

把string類型轉成字符數組類型:

            char[] cs = str.ToCharArray();   
            //等號右邊:對象的名字.方法的名字。表示調用這個對象的這個方法。
            
            Console.WriteLine(cs[1]);     //輸出字符數組裏的第二個字符。

因爲可以直接提取string裏的字符,所以一般不用轉成字符數組。

            Console.WriteLine(str[1]);     //輸出字符數組裏的第二個字符。

長度(最常用)

            Console.WriteLine(str.Length);    //顯示數組長度。此處Length是屬性。

截取(Substring兩種方式)

方式一:從某處開始截取,直到最後

           //從第3個字符開始截取
            Console.WriteLine(str.Substring(2));  

//結果爲“hello”裏的llo      

方式二:從某處開始截取,且要求截取幾個字符

          //第一個2代表:從第3個字符開始。第二個2代表:截取2個字符長度。
            Console.WriteLine(str.Substring(2,2));

//結果爲“hello”裏的ll            

搜索(3種方式)

搜索字符串裏是否有“l”?

方式一:從頭開始搜索

  //從頭搜索字符串,返回位置信息。查找不到返回負數。返回正數第一個l的位置
            int index = str.IndexOf("l");    
           
            Console.WriteLine(index);    
//因爲是hello里正數第一個l,所以結果爲2。       

方式二:從尾部開始搜索

 //從尾部搜索字符串,返回位置信息。查找不到返回負數。返回倒數第一個l的位置
            index = str.LastIndexOf("l");   
            Console.WriteLine(); 
//因爲是hello裏到數第一個l,所以結果爲1。        

方式三:只搜索字符串的包含關係(只要有即可)

 //搜索字符串包含關係。即不需要返回值
            bool res = str.Contains("l");
            
            Console.WriteLine(res);    //打印結果Ture or False

英文字母大小寫轉換

注意:寫在WriteLine()括號裏的方法,通常不會改變原本的值,它相當於重新開闢一塊內存。

轉成小寫

           string str = "Hello CSharp";

           Console.WriteLine(str.ToLower());   //轉成小寫,輸出

轉成大寫

           Console.WriteLine(str.ToUpper());   //轉成大寫,輸出

刪除

刪除頭尾多餘的空格 (很常用)

無論多少個空格,只要在兩頭,都可以去除。

            string str = "  小李飛刀 ";     //此時字符串的頭尾有多餘的空格
            Console.WriteLine(str);

            //刪除頭尾的空格
            Console.WriteLine(str.Trim());

刪除頭尾指定字符

方式一:Trim

           //刪除頭尾的指定字符
            Console.WriteLine(str.Trim('_'));
            //刪除頭部的指定字符
            Console.WriteLine(str.TrimStart('_'));
            //刪除尾部的指定字符
            Console.WriteLine(str.TrimEnd('_'));

方式二:Remove

           //刪除從索引3開始的全部字符
            Console.WriteLine(str.Remove(3));
           //刪除從索引3開始的2個字符的長度
            Console.WriteLine(str.Remove(3,2));

刪除空格與刪除指定字符的區別

在這裏插入圖片描述

插入(在第幾索引的前面添加)

            string str = "_小李飛刀_";
            //插入(在第幾索引的前面添加)。此處目的是變成"_小李_飛刀_"
            Console.WriteLine(str.Insert(3,"_")) ;     
            //字符用單引號,此處是雙引號,代表此處可以插入字符串

分割(非常非常常用)

在這裏插入圖片描述

            string str = "_小_李_飛_刀_";
           
            //分割字符串(特別特別常用)
            string[] strs = str.Split('_');     //分割成名叫strs的數組了
            Console.WriteLine(strs[3]);
//結果:飛。第0索引是空,第1索引是小,第2索引是李,第3索引是飛,第4索引是刀,並且還有第5索引——空。

拼接

方式一:Concat

            //把數組字符串拼接起來
            Console.WriteLine(string.Concat(strs));

方式二:加號

Console.WriteLine("小"+"李");

方式三:使用字符串構造器去創建字符串

字符串構造器,算是一個新的類,這個類叫做StringBuilder。
它拼接字符不是使用加號,而是通過Append這個方法。

            StringBuilder sb = new StringBuilder();
            sb.Append("今天,");    //拼的第一個。這個方法可以無數次用
            sb.Append("天氣");
            sb.Append("不錯!");
            //拼完之後想把它打印成普通的字符串,要使用ToString這個方法就可以將上面的方法轉成字符串。
            Console.WriteLine(sb.ToString());     

方式四:Join(用自定義字符拼接)

 //把數組字符串用自定義字符拼接。此處用波浪線拼接
            Console.WriteLine(string.Join("~",strs));

在這裏插入圖片描述

替換(可用於屏蔽關鍵字)

            //替換字符   把_替換成*
            Console.WriteLine(str.Replace('_','*'));

這個方法支持t替換成字符串,所以用雙引號即可

            string str = "   小_ 李_    飛_ 刀_";
            //替換字符   把空格替換成無
            Console.WriteLine(str.Replace(" ","")); 

格式化

格式化字符

            //格式化字符串
            str = string.Format("1+1=2");
//注意此處Format方法不是str(對象名)調用,而是string(類名)來調用的,說明Format方法是個靜態的。
            Console.WriteLine(str);
//結果:1+1=2
優點:佔位符

大括號裏的是佔位符,佔位符有幾位,後面的參數就要寫幾位。

 str = string.Format("{0}+{1}={2}",1,1,2);
 //結果:1+1=2 
str = string.Format("{0}+{1}={2}",1,1,1+1);
//結果:1+1=2。 

便於計算大數據

            int a = 36000;
            int b = 44000;
            str = string.Format("{0}+{1}={2}",a,b,a+b);
//注意此處Format方法不是str(對象名)調用,而是string(類名)來調用的,說明Format方法是個靜態的。
            Console.WriteLine(str); 
//結果:36000+44000=80000

格式化日期

對佔位符有要求的話,加冒號。
日期的格式是yyyyMMdd(年月日),他們之間的分隔符隨意,此處用的槓和冒號。

            str = string.Format("{0:yyyy-MM-dd hh:mm:ss}",DateTime.Now);
            /*此處只有0一個佔位符,我們給它當前的日期。
              DateTime(類名).Now(方法)說明是個靜態的。它的含義是返回當前的日期。
              但這個時間只有格式化成我們規定的樣式,我們才能看懂。*/
            Console.WriteLine(str); 
 //結果:2019-06-08 09:57:56

單例類

內部

單例
正常情況下,一個類可以實例化出多個對象。單例:一個類只能實例化出一個對象。
管理類:稚嫩有一個對象存在,會用到單例比較多。
員工:小王、小李
老闆:副總
聲音播放器:播放音樂的,播放音效的,播放環境音的
聲音管理器

    //寫成單例類
    public class PersonManager  
     //上面有一個類叫Person,這裏寫個類用於管理Porson。
    {
        private static PersonManager instance;
  //private(私有的)static(靜態)person(類的名字)instance(翻譯爲:實例)
        //想訪問私有的,便要寫一個同名(首字母大寫)的屬性了。
        public static PersonManager Instance     
        {
            /*屬性裏原本有Set和Get。其實是可以二選一的。
             如果只有Set,說明只能賦值,不能取出來。
             如果只是Get,說明只能取出來,不能賦值。單例的話,一般只寫Get。*/
            get
            {
                //做一個判斷:如果變量默認是空
                if(instance == null)
                {
                    instance = new PersonManager();   //實例化了一個管理類
                }
                return instance;    //返回
            }
        }

        public Person[] persons;     
        //通過一個屬性:person類型的數組,叫persons。

    }

外圍

         //外界調用時
          PersonManager.Instance.persons;
            // PersonManager.Instance;
/*第二次調用時,因爲已經有第一次的返回值了,所以輸入的不是空,導致直接返回。
            所以無論調用多少次,都是第一次產生的那個對象*/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章