淺談C#之字串

來源:互聯網
上載者:User
字串的處理

•C#中單個字元用單引號包含就是char類型,(‘a’),單引號中放且只能放一個字元。ASCII碼

•單個字元也可以表示為字串,還可以有長度為0的字串。null和""的區別,String.IsNullOrEmpty•使用s.Length屬性來獲得字串中的字元個數•string可以看做是char的唯讀數組。char c = s[1];。例子:遍曆輸出string中的每個元素。•C#中字串有一個重要的特性:不可變性,字串一旦聲明就不再可以改變。所以只能通過索引來讀取指定位置的char,不能對指定位置的char進行修改。

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

 //字串是不可變的,所以要先產生一個char[],再對char[]進行修改

            //再根據char[]產生新的字串,但是原先的字串沒有改變(他就在那裡)

            //可以根據人產生模型,也可以根據模型產生人,但是人不能修改。

           //這樣根據李詠產生模型,然後把臉搞短,再產生李詠2,李詠2和李詠是兩個對象

            //s=new string(s);相當於李詠2把李詠殺死替換了李詠,好像李詠臉變短了,但是是兩個執行個體

            //string s="abc";是聲明一個變數s,把s指向"abc"這個字串。

            //strings1 = "123456";

            //char[] chars1 =s1.ToCharArray();//是根據s1複製一份char[]

            //chars1[0] = 'w';//不會影響s1

            //string s2 = new string(chars1);//根據chars1產生一份新的string

            //Console.WriteLine(s2);

            //Console.WriteLine(s1);

            //chars1[0] = 'c';//並不會影響s2

            //Console.WriteLine(s2);

            //面試練習題:字串轉換為大寫、小寫、翻轉,inttostring

是一個拷貝的過程:

 //strings1 = "123456";

            //char[] chars1 =s1.ToCharArray();//是根據s1複製一份char[]

            //chars1[0] = 'w';//不會影響s1

            //string s2 = new string(chars1);//根據chars1產生一份新的string

            //Console.WriteLine(s2);

            //Console.WriteLine(s1);

            //chars1[0] = 'c';//並不會影響s2

            //Console.WriteLine(s2);

string[]c = new string[]{ "零","壹","貳","三","肆","伍","陸","柒","捌","玖","年","月","日"
};

            try

            {

                string input = "2009年9月5日";

                StringBuilderstr =new
StringBuilder();

                for (intcount = 0; count <
input.Length;count++)

                {

                    string temp =
input.Substring(count,1);

                    switch (temp)

                    {

                        case "1":
str.Append(c[1]);break;

                        case "2":
str.Append(c[2]);break;

                        case "3":
str.Append(c[3]);break;

                        case "4":
str.Append(c[4]);break;

                        case "5":
str.Append(c[5]);break;

                        case "6":
str.Append(c[6]);break;

                        case "7":
str.Append(c[7]);break;

                        case "8":
str.Append(c[8]);break;

                        case "9":
str.Append(c[9]);break;

                        case "0":
str.Append(c[0]);break;

                        case "年":
str.Append(c[10]);break;

                        case "月":
str.Append(c[11]);break;

                        case "日":
str.Append(c[12]);break;

                        default: break;

                    }

                }

                this.button1.Text =
str.ToString();

            }

            catch (Exception ex)

            {

                throw new Exception("已經過測試");

            }

還可以進一步最佳化,全部用查表法


常見疑問

•誰說字串不可變?strings = "abc";s="123",s這不是變了嗎•要區分變數名和變數指向的值的區別。程式中可以有很多字串,然後由字串變數指向他們,變數可以指向其他的字串,但是字串本身沒有變化。字串不可變性指的是記憶體中的字串不可變,而不是變數不變。•strings10 = s1;//s10指向s1指向的字串,而不是s10指向s1,哪怕s1以後指向了其他記憶體,那麼s10還是指向"hello"•ToLower():得到字串的小寫形式。•注意字串是不可變的,所以這些函數都不會直接改變字串的內容,而是把修改後的字串的值通過函數傳回值的形式返回。s.ToLower()與s=s.ToLower()•ToUpper():得到字串的大寫形式;Trim()去掉字串兩端的空白(不會去掉中間的)。•s1.Equals(s2,StringComparison.OrdinalIgnoreCase),兩個字串進行比區分大小寫比較。推薦這種用法。•strings2 = string.Format("{0}年{1}月{2}日",
year, month, day);•用Reflector看WriteLine和string.Format的關係。看別人程式的實現、看微軟的實現,偷窺的快感!•strings1 = string.Join("|", values);//第一個參數是string類型分隔字元

字串分割

•string[]Split(params char[] separator):將字串按照指定的分割符分割為字串數組;•string[]Split(char[] separator, StringSplitOptions options)將字串按照指定的char分割符分割為字串數組(options取RemoveEmptyEntries的時候移除結果中的空白字串);•string[]Split(string[] separator, StringSplitOptions options)將字串按照指定的string分割符分割為字串數組。•例子1:從日期文字("2008-08-08")中分析出年、月、日;2008年08月08日。•例子2:從一個記錄了學產生績的文字文件,每個學產生績是一行,每行是用|分割的資料,用|分割的域分別是姓名、年齡、成績,寫程式取出成績最高學生的姓名和成績。參考:使用string[]
lines =System.IO.File.ReadAllLines(@"c:\root.ini",
Encoding.Default);從文字檔讀取資料,傳回值為string數組,每個元素是一行。(5 min)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.