天天看點

C# 基礎學習第四天 C# 基礎學習第四天 C# 基礎學習第四天

C# 基礎學習第四天

可變參數:

                參數數組:int sum(params int[] values)

                                  int sum(string name,params int[]values)

                可變參數數組必須是最後一個

                參數預設值 (.Net4.0):void

               SayHello(string name,int age=20)(了解)

               static void Main(string[] args)

              {  

                    SayHello("tom","張大虎","狗蛋");   //第一個參數是 name 第二個以後參數是為params string[] nicknames服務的!

                 Console.ReadKey();

              }

             static void SayHello(string name, params string[] nicknames) //params 可變數組!!參數可變

            {

                   Console.WriteLine("我的名字是{0}",name);

                   foreach (string nickname in nicknames)

                  {

                       Console.WriteLine("我的昵稱:{0}",nickname);

                  }

            }

                  顯示:我的名字是tom

                  我的昵稱:張大虎

                  我的昵稱:狗蛋

函數重載

構成重載的條件:   

                  //函數的參數必須不一緻(函數名稱可以重複)

                  //參數類型不同或者參數個數不同,與傳回值無關     

 1、函數名相同、參數相同(錯誤)

 static void Main(string[] args)

        {

            SayHello("王大壯");

            SayHello("王小壯");

        }

        static void SayHello(string name)

        {

            Console.WriteLine("我是{0}",name);

        }

        static void SayHello(string name)

        {

            Console.WriteLine("I am{0}"name);

        }

2、函數名相同、參數相同、傳回值不同(錯誤)

 static void Main(string[] args)

        {

            SayHello("王大壯");

            string s = SayHello("Tom");

        }

        static void SayHello(string name)

        {

            Console.WriteLine("我是{0}",name);

        }

        static string SayHello(string name)

        {

            return "大家好,我是:"+name;

        }

3、函數名相同、參數不同(正确)

 static void Main(string[] args)

        {

            SayHello("王大壯");

            SayHello(20);

            Console.ReadKey();

        }

        static void SayHello(string name)

        {

            Console.WriteLine("我是{0}",name);

        }

        static void SayHello(int age)

        {

            Console.WriteLine("我的年齡{0}",age);

        }

4、函數名相同、參數不同多個參數(正确)

static void Main(string[] args)

        {

            SayHello("王大壯");

            SayHello("大大王","孫猴子");

            Console.ReadKey();

        }

        static void SayHello(string name)

        {

            Console.WriteLine("我是{0}",name);

        }

        static void SayHello(string name,string nickname)

        {

            Console.WriteLine("我是{0},昵稱是{1}",name,nickname);

        }

字元串的處理:

            ('a')----char類型   一個字元

            string s1 = "a"//想長就長想短就短   不等于 char c1= 'a';//有且隻能有一個字元

           使用: 名稱.length屬性來後的字元串中的字元個數

           例如: string s5 = "hello";

                  Console.WriteLine(s5.Length);//取字元串長度為5 不是6 和C語言不一樣,不考慮最後'\0'

                  Console.WriteLine(s5[1]);//取編号為1的字元//列印顯示 "e";

                  char c3 = s5[3];//取S5中第三個元素放到C3中

                  for(int i =0;i<s5.Length;i++)

                  {

                        char c6 = s5[i]

                        console.write(c6)

                  }                

反序輸出:static void Main(string[] args)

        {

            string s5 = "hello";

            string s = "";

            for (int i = s5.Length - 1; i >= 0; i--)

            {

                s = s + s5[i];    

            }

            Console.WriteLine(s);

            Console.ReadKey();

        } 

C#中單個字元用單引号包含就是char類型,('a'),單引号中放且隻能放一個字元

char c1 ='a';//正确          char c2 ='abc';//錯誤

單個字元也可以表示為字元串,還可以有長度為0的字元串

string s1 ="hello";   string s2 ="a"; string s3 ="";

使用s.Length屬性來獲得字元串中的字元個數

string s5 = "hello";

console.writeLine(s5.length);

console.writeline(s5[1]);//第"1"個數為"e"

string可以看做是char的隻讀數組,char c= s[1];例子:周遊輸出string 中的每個元素

//正序反序列印

string s5 = "hello";

            char c3 = s5[3];

            for (int i = 0; i < s5.Length; i++)

            {

                char c6 = s5[i];

                Console.WriteLine(c6);

            }

            for (int i = s5.Length - 1; i >= 0; i--)

            {

                Console.WriteLine(s5[i]);

            }

C#中字元串有一個重要特性:

                         不可變性,字元串一旦聲明就不再可以改變,是以隻能通過索引來讀取指定位置的char,不能對指定的位置的char進行修改。

    如果要對char進行修改,那麼就必須建立一個新的字元串,用S.ToCharArray()方法得到字元串的char數組,對數組進行修改後,調用new string(char[])這個構造函數(暫時不用細研究)來建立char數組的字元串,一旦字元串被建立,那麼char數組的修改也不會造成字元串的變化,例子:将字元串中的A替換為a。

//修改字元串       

            string s1 = "hello";

            char[] chars = s1.ToCharArray();//得到hello這個字元串

            chars[0]='a';

            string s2 = new string(chars);

            Console.WriteLine(s2);

            Console.ReadKey();

            // s1= hello  s2 = aello

            string s1 = "hello";

            string s10= s1;//s10指向s1指向的字元串,而不是s10指向s1,哪怕s1以後指向其它記憶體,那麼s10還是指向hello;

String 類常用函數

1、ToLower():得到字元串的小寫形式。

             s.ToLower()與s=s.ToLower();

             ToUpper();得到字元串的大寫形式;

  舉例說明:string s = "Hello";//s是不能被改變的

            string str= s.ToLower();//得到一個新的字元串

            // 一般寫為 s= s.ToLower()//并不是改變字元串内容,而是生成一個新的全部變為小寫的字元串,然後用s指向這個新的字元串。

            Console.WriteLine(str);

            Console.WriteLine(str.ToUpper());//轉換成大寫

            Console.ReadKey();

注意:字元串是不可變的,是以這些函數都不會直接改變字元串的内容,而是把修改後的字元串的值通過函數傳回值的形式傳回。

2、Trim()去掉字元串兩端的空白。

            string s1 = " ab ";//兩邊有空格

            s1 = s1.Trim();//去掉兩邊的空白,隻留下有意義的部分

            Console.WriteLine("|{0}|",s1);

            Console.ReadKey();

3、s1.Equals(s2,StringComparison.OrdinallgnoreCase)兩個字元串進行比區分大小寫的比較

   示例:    bool b = "abc".Equals("ABC",StringComparison.OrdinalIgnoreCase);

            //==是區分大小寫的比較,Equals("ABC",StringComparison.OrdinalIgnoreCase);是忽略大小寫的比較。

            //IgnoreCase忽略大小寫

            //兩個字元進行比較區分大小寫比較

            Console.WriteLine(b);//結果為true

字元串的分割

一、string[] Split(params char[] separator):将字元串按照指定的分割符分割為字元串數組;

重載函數、可變函數  params

aaa,bbb,cccc,adfaf

傳回值是一個字元串數組

重點例題: 

               //以單個符号分割輸出

            1、 string s1 = "aaa,vvv,ccc,dfafdasf";

                   //把一個字元串以","分隔,分别列印出來每個字元

                   string[] strs = s1.Split(',');//列印一個字元串,以指定的字元分割。重點!!

                   // 隻是輸出

                   foreach (string item in strs)

                   {

                        Console.WriteLine(item);

                   }

                   Console.ReadKey();

         //以不同符号分割輸出

      2、 string s1 = "aaa,vvv,ccc,dfafdasf.fsdfs|hell2232|ffsdf";

            //把一個字元串以","分隔,分别列印出來每個字元

            string[] strs = s1.Split(',','|','.');//列印一個字元串,以指定的字元分割。重點!!

            // 隻是輸出

            foreach (string item in strs)

            {

                Console.WriteLine(item);

            }

            Console.ReadKey();

二、string[] Split(char[] separator,StringSplitOptions options)将字元串按照指定的char分割符法呢個為字元串數組(options 取RemoveEmptyEntrles的時候移除結果中的空白字元串)

    string s1 = "aaa,bb,cc,,12,3";//空的地方被識别為長度為0的字元串,可以使用重載函數清楚

 例題: string[] strs = s1.Split(new char[]{','},StringSplitOptions.RemoveEmptyEntries);

            foreach(string item in strs)

            {

                Console.WriteLine(item);

            }

            Console.ReadKey();

三、string[] Split(string[] separator,StringSplitOptions options)将字元串按照指定的string分割符分割為字元串數組。

例題:string s1 = "我是傑克遜我是麥克新我是韓庚";

            //按照"我是"進行分隔,字元串分割

            string[] strs = s1.Split(new string[] { "我是" }, StringSplitOptions.RemoveEmptyEntries);

            foreach(string item in strs)

            {

                Console.WriteLine(item);

            }

            Console.ReadKey();

練習: 1、從日期字元串("2008-08-08")中分析出年、月、日;

            string s1 = "2008-08-08";

            string[] strs = s1.Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries);

            foreach(string item in strs)

            {

                Console.WriteLine(item);

            }

            Console.ReadKey();

          2、從一個記錄了學生成績的文本文檔,每個學生成績是一行,每行是用|分割的資料,用|分割的域分别是姓名、年齡、成績,寫程式取出成績最高學生的姓名和成績。

參考使用string[]lines=System.IO.File.ReadAllLines(@"c:\root.int",Encoding.Default);從文本檔案讀取資料,傳回值為string數組,每個元素是一行。

 ???????????????????????????????

字元串函數詳解

1、字元串替換:string Replace(string oldValue,string newValue)将字元串中的出現oldValue的地方替換為newValue。

例如:名字替換

           string s = "李時珍同志是一個好同志,是一個好醫生,向李時珍通知學習";

            s = s.Replace("李時珍","李素麗");//内容不可變,生成新字元串

            Console.WriteLine(s);

            Console.ReadKey();

            //文章裡面敏感詞都變成“*”思路是這樣的

2、取子字元串:string SubString(int startIndex)取從位置startIndex開始一直到最後的子字元串;

       string s ="http://www.baidu.com";

            string 域名 =s.Substring(7);//取子字元串,從指定字元串開始,一直到最後

            Console.WriteLine(域名);

            Console.ReadKey();

3、string Substring(int starIndex,int length),取從位置startIndex開始長度為length的子字元串,如果子字元串的長度不夠length則報錯。

       string s ="http://www.baidu.com";

            string 域名 =s.Substring(7,5);//第二個參數是指截取多長,而不是截取位置,截取長度一定要夠長

            Console.WriteLine(域名);

            Console.ReadKey();

4、bool Contains(string value)判斷字元串中是否含有子串value 

            string s = "我們的社會真和諧啊";

            if (s.Contains("社會") || s.Contains("和諧"))

            {

                Console.WriteLine("含有敏感詞彙,請文明用語!");

            }

            Console.ReadKey();

   例如:判斷是不是網址,隻需要判斷是不是以http開頭的就可以了

5、bool StartsWith(string value)判斷字元串是否以子串value開始

           string s = "http://www.cctv.com";

            if (s.StartsWith("http://") || s.StartsWith("https://"))

            {

                Console.WriteLine("網址");

            }

            else

            {

                Console.WriteLine("不是網址");

            }

            Console.ReadKey();

6、bool EndWith(string value)同上,判斷字元串是否以子串value結束;

7、int  Indexof(string value);取子串value第一次出現的位置

            //傳回子字元串的第一個字元第一次出現的位置

            //如果沒有查詢到相關字元,則輸出"-1"

            string s = "你好,我是王某某";

            int i = s.IndexOf("我是");

            Console.WriteLine(i);

練習:1、接收使用者輸入的字元串,将其中的字元以與輸如相反的順序輸出。

       Console.WriteLine("請輸入字元串:"); 

            string str = Console.ReadLine();

            string s = "";

            for (int i = str.Length - 1; i >= 0; i--)

            {

                s = s + str[i];

            }

            Console.WriteLine(s);

            Console.ReadKey();