C#編程及應(yīng)用程序開(kāi)發(fā)(第2版)電子課件第五章.ppt
《C#編程及應(yīng)用程序開(kāi)發(fā)(第2版)電子課件第五章.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《C#編程及應(yīng)用程序開(kāi)發(fā)(第2版)電子課件第五章.ppt(52頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
第5章數(shù)據(jù)的輸入和輸出,(時(shí)間:1.5次課,3學(xué)時(shí)),第5章數(shù)據(jù)的輸入和輸出,輸入/輸出是程序得以實(shí)際應(yīng)用的必要措施,在程序中實(shí)現(xiàn)數(shù)據(jù)的輸入和輸出也是每個(gè)程序員必須掌握的基本編程技術(shù)。在前面各章節(jié)的舉例中,我們都已經(jīng)使用了C#語(yǔ)言的部分輸入/輸出系統(tǒng),其中用得最多的是.NET類(lèi)庫(kù)中Console類(lèi)的一個(gè)方法Console.WriteLine(),這個(gè)方法是將在程序中生成的數(shù)據(jù)或信息輸出到控制臺(tái)(Console)中。另外,程序不光是要向控制臺(tái)輸出數(shù)據(jù),還要從控制臺(tái)讀取輸入的數(shù)據(jù),或者要求輸出的數(shù)據(jù)具有一定的格式。一般說(shuō)來(lái),數(shù)據(jù)的輸入/輸出(I/O)方式有兩種:控制臺(tái)I/O和文件I/O。C#的I/O系統(tǒng)非常龐大,也有控制臺(tái)I/O和文件I/O兩大部分,本章只介紹控制臺(tái)I/O部分,而文件I/O部分將在后續(xù)章節(jié)詳細(xì)介紹。C#的控制臺(tái)I/O主要是通過(guò)命名空間System中的類(lèi)Console來(lái)實(shí)現(xiàn)的,該類(lèi)給出了標(biāo)準(zhǔn)的輸入和輸出的方法,這些方法可用于從控制臺(tái)讀寫(xiě)字符。本章介紹的內(nèi)容不是任何C#語(yǔ)法,而是.NET框架中常用的控制臺(tái)輸入/輸出的類(lèi)和方法的使用格式。本章學(xué)習(xí)重點(diǎn):掌握在控制臺(tái)中輸入/輸出數(shù)據(jù)的方法掌握輸出格式化數(shù)據(jù)的方法掌握處理字符串的方法,第5章數(shù)據(jù)的輸入和輸出,5.1控制臺(tái)輸入5.2控制臺(tái)輸出5.3處理字符串的方法,5.1控制臺(tái)輸入,5.1.1Console.Read()方法5.1.2Console.ReadLine()方法,,5.1控制臺(tái)輸入,System.Console類(lèi)的Read()和ReadLine()方法可用來(lái)實(shí)現(xiàn)控制臺(tái)輸入,本節(jié)我們將詳細(xì)介紹如何使用這兩種方法獲取輸入。,5.1.1Console.Read()方法,Read()方法每次從輸入流(控制臺(tái))中讀取一個(gè)字符,直到收到Enter鍵才返回。將接收的字符以int型(32位整數(shù))值返回給變量;如果輸入流中沒(méi)有數(shù)據(jù),則返回-1。Read()方法是一個(gè)靜態(tài)方法,我們可以直接通過(guò)類(lèi)名Console調(diào)用它,調(diào)用的格式為Console.Read。Read()方法的原型為:publicstaticintRead()。如果我們輸入了多個(gè)字符,然后按Enter鍵(此時(shí)輸入流中將包含用戶輸入的字符,加上Enter鍵和換行符‘\r\n’),則Read()方法只返回用戶輸入的第一個(gè)字符。但我們可通過(guò)對(duì)程序的循環(huán)控制,多次調(diào)用Read()方法來(lái)獲取所有輸入的字符。Read()方法返回給變量的數(shù)據(jù)的類(lèi)型是32位整數(shù),如果需要得到輸入的字符,則必須通過(guò)數(shù)據(jù)類(lèi)型顯式轉(zhuǎn)換才可以得到相應(yīng)的字符。,5.1.1Console.Read()方法,【例5.1】Read()方法的使用。usingSystem;classMyRead1{publicstaticvoidMain(){inta;charch;Console.Write("請(qǐng)從鍵盤(pán)輸入一個(gè)字符:");a=Console.Read();//程序運(yùn)行到Read方法會(huì)暫停,直到用戶在控制臺(tái)中按任意鍵ch=(char)a;//顯式類(lèi)型轉(zhuǎn)換Console.WriteLine(a);Console.WriteLine(ch);}}程序運(yùn)行結(jié)果:請(qǐng)從鍵盤(pán)輸入一個(gè)字符:a(回車(chē))97a,5.1.1Console.Read()方法,【例5.2】通過(guò)Read()方法從控制臺(tái)接收用戶輸入的一系列字符,然后把用戶輸入的內(nèi)容顯示出來(lái)。usingSystem;classMyRead2{publicstaticvoidMain(string[]args){stringbuf;Console.Write("請(qǐng)輸入字符串(按Enter鍵接收輸入,按x鍵退出程序):");buf="";while(true){intc=Console.Read();//接收一個(gè)字符if((char)c==x}}在本程序中,可以一次輸入單個(gè)字符,也可以一次輸入多個(gè)字符。當(dāng)按下x或X鍵再按下Enter鍵后將會(huì)退出本程序。,5.1.2Console.ReadLine()方法,ReadLine()方法用于從控制臺(tái)中一次讀取一行字符串,直到遇到Enter鍵才返回讀取的字符串。但此字符串中不包含Enter鍵和換行符(‘\r\n’)。如果沒(méi)有收到任何輸入,或接收了無(wú)效的輸入,那么ReadLine()方法將返回null。ReadLine()方法也是一個(gè)靜態(tài)方法,可以直接通過(guò)類(lèi)名Console來(lái)調(diào)用它,調(diào)用的格式為Console.ReadLine。ReadLine()方法的原型為:publicstaticstringReadLine(),5.1.2Console.ReadLine()方法,【例5.3】使用ReadLine()方法。usingSystem;classMyReadline{publicstaticvoidMain(){inti;stringstr;Console.Write("請(qǐng)輸入你的姓名:");str=Console.ReadLine();Console.Write("用戶的姓名為:");Console.WriteLine(str);}}程序的運(yùn)行結(jié)果:請(qǐng)輸入你的姓名:王紅(回車(chē))用戶的姓名為:王紅,5.2控制臺(tái)輸出,5.2.1數(shù)據(jù)的格式化5.2.2格式化說(shuō)明符,,5.2控制臺(tái)輸出,在前述的各章節(jié)中,我們同樣也多次使用了Console類(lèi)的Write()和WriteLine()方法來(lái)輸出程序的計(jì)算結(jié)果。日常生活中,有時(shí)我們不僅僅要求程序簡(jiǎn)單地輸出數(shù)據(jù),還要求能輸出具有一定格式的數(shù)據(jù),以豐富我們應(yīng)用程序的應(yīng)用需求。,5.2.1數(shù)據(jù)的格式化,在日常生活中,各行各業(yè)的數(shù)據(jù)表示形式有多種。例如,一個(gè)十進(jìn)制數(shù)字965840,可能有以下表示形式:表示人民幣:¥9,658.40表示美元:$9,658.40用于科學(xué)計(jì)算:9.65840105,在C#中表示為9.65840E5可見(jiàn),對(duì)于一個(gè)程序來(lái)說(shuō),它的計(jì)算結(jié)果只是一個(gè)無(wú)任何語(yǔ)義的數(shù)字。所以如果希望一個(gè)應(yīng)用程序的計(jì)算結(jié)果在輸出時(shí)能反映出它的應(yīng)用特征,則必須在程序的輸出語(yǔ)句中給出所需數(shù)據(jù)格式的轉(zhuǎn)換控制。C#語(yǔ)言具有將數(shù)字在不同的表示形式之間相互轉(zhuǎn)換的功能——數(shù)據(jù)的格式化。數(shù)據(jù)的格式化是指通過(guò)程序(方法),將數(shù)據(jù)的表現(xiàn)形式轉(zhuǎn)換為一定樣式的過(guò)程。C#語(yǔ)言是通過(guò).NET類(lèi)庫(kù)方法、格式化字符串以及其他的控制信息共同完成的。,5.2.1數(shù)據(jù)的格式化,一般實(shí)現(xiàn)把數(shù)字轉(zhuǎn)換為指定格式的字符串輸出的基本方式有3種:Write()和WriteLine()方法可以直接把數(shù)值類(lèi)型變量的值,轉(zhuǎn)換成字符串輸出到控制臺(tái)中,并可使用格式說(shuō)明符來(lái)控制輸出的數(shù)據(jù)格式。Write()方法用來(lái)向控制臺(tái)輸出一條信息,并且光標(biāo)仍在輸出信息的末尾。一般Write()方法中有以下兩種常用的形式:publicstaticvoidWrite(數(shù)值數(shù)據(jù)類(lèi)型變量);//直接輸出變量的值publicstaticvoidWrite("{N[,M][:Yn]}",變量1,變量2…);其中:N——表示輸出變量的序號(hào)。N為0對(duì)應(yīng)輸出的第1個(gè)變量,N為1則對(duì)應(yīng)輸出的第2個(gè)變量,依次類(lèi)推。[,M]——可選項(xiàng)。M表示輸出的變量在控制臺(tái)中所占據(jù)的字符個(gè)數(shù),如果該數(shù)字為負(fù)數(shù),則輸出按照左對(duì)齊方式;如果該數(shù)字為正數(shù),則輸出按照右對(duì)齊的方式。[:Yn]——可選項(xiàng)。其中Y是格式化字符串,它指的是數(shù)據(jù)的輸出格式說(shuō)明符,將在5.2.2節(jié)中給出。n為一個(gè)正整數(shù)。表示了數(shù)據(jù)的精度范圍(有效數(shù)字范圍),它用于控制當(dāng)前數(shù)據(jù)在格式化后表現(xiàn)出來(lái)的有效數(shù)字個(gè)數(shù)。例如:inta=32767;doubled=456.56789;Console.Write("a=0 x{0,8:X}\td={1,10:F3}",a,d);Console.Write("a=0 x{0,-8:X}\td={1,-10:F3}",a,d);輸出結(jié)果:a=0 x7fffd=456.568a=0 x7fffd=456.568本例中的格式說(shuō)明符X和F在5.2.2節(jié)中給出說(shuō)明。,5.2.1數(shù)據(jù)的格式化,WriteLine()方法用來(lái)向控制臺(tái)產(chǎn)生一行信息,并在信息的尾部自動(dòng)添加“\r\n”操作符,即輸出信息后光標(biāo)自動(dòng)移到下一新行。同Write()方法類(lèi)似,WriteLine方法有以下兩種常用的形式:publicstaticvoidWriteLine(數(shù)值數(shù)據(jù)類(lèi)型變量);publicstaticvoidWriteLine("{N[,M][:Y]}",變量1,變量2…);WriteLine()方法的參數(shù)與Write()方法的參數(shù)意義一樣。例如:inta=32767;doubled=456.56789;Console.WriteLine("a=0 x{0,8:X}\td={1,10:F3}",a,d);Console.WriteLine("a=0 x{0,-8:X}\td={1,-10:F3}",a,d);輸出結(jié)果:a=0 x7fffd=456.568a=0 x7fffd=456.568可見(jiàn)此例輸出結(jié)果與Write()方法不同的是每一個(gè)WriteLine()方法輸出一行信息后自動(dòng)換行。,5.2.1數(shù)據(jù)的格式化,調(diào)用ToString方法中使用格式說(shuō)明符。ToString方法是System.Object類(lèi)中的一個(gè)方法,此方法可以將變量的值轉(zhuǎn)換為由數(shù)字、數(shù)學(xué)符號(hào)等組成的字符串。由于所有的類(lèi)都是從Object類(lèi)中派生出來(lái)的,因此,所有的對(duì)象都可以使用ToString方法,例如各種基本數(shù)據(jù)類(lèi)型(int32、int64)等。ToString方法的調(diào)用格式為:類(lèi)對(duì)象名稱(chēng).ToString(“格式說(shuō)明符”)例如:intvar=8769;stringstr=var.ToString("C");//使用ToString()方法,將整型數(shù)轉(zhuǎn)換為金額格式表示輸出結(jié)果將是:¥8,769.00其中格式說(shuō)明符C是用于金額的格式說(shuō)明符,我們將在5.2.2節(jié)中介紹。調(diào)用String類(lèi)的Format靜態(tài)方法。Format()方法可用于將信息格式化為一個(gè)新的字符串。由于Format()方法是靜態(tài)的,因此可以以String.Format的方式直接調(diào)用。Format方法常用的使用格式:stringstr=String.Format("{N[,M][:Yn]}",變量1,變量2,….);其中:str是格式化后得到的字符串;其他的參數(shù)與Write和WriteLine方法中的參數(shù)相同。Format()方法還有兩種使用格式可參閱MSDN文檔。,5.2.1數(shù)據(jù)的格式化,【例5.4】基本的格式化方法。usingSystem;classMyFormat{publicstaticvoidMain(){inta=34567;Console.WriteLine("使用WriteLine格式化數(shù)據(jù):");Console.WriteLine("\n{0:C}\n{0:C4}",a);Console.WriteLine("\n{0:F}\n{0:F4}",a);Console.WriteLine("使用ToString格式化數(shù)據(jù):");stringstr1=a.ToString("c");stringstr2=a.ToString("c3");Console.WriteLine(str1);Console.WriteLine(str2);Console.WriteLine("使用String.Format格式化數(shù)據(jù):");stringstr4=String.Format("我們也能使用String.Format格式化數(shù)據(jù):");stringstr5=String.Format("\n{0:c}\n{0:c0}",a);Console.WriteLine(str4);Console.WriteLine(str5);}},5.2.1數(shù)據(jù)的格式化,程序運(yùn)行結(jié)果:使用WriteLine格式化數(shù)據(jù):¥34,567.00¥34,567.000034567.0034567.0000使用ToString格式化數(shù)據(jù):¥34,567.00¥34,567.000使用String.Format格式化數(shù)據(jù):¥34,567.00我們也能使用String.Format格式化數(shù)據(jù):¥34,567在本例中將變量a中的數(shù)字格式化為金額、小數(shù),其中的說(shuō)明符將在5.2.2節(jié)中詳細(xì)介紹。,5.2.2格式化說(shuō)明符,.NET框架體系規(guī)定可以使用兩種格式進(jìn)行數(shù)據(jù)的格式化:一種是由系統(tǒng)定義的標(biāo)準(zhǔn)格式,另一種是用戶自定義格式。這兩種格式主要包含了各種用于格式化數(shù)據(jù)的格式控制字符,使用這些控制字符組成所需的數(shù)據(jù)格式,然后由5.2.1節(jié)中所述3種格式化方式即可實(shí)現(xiàn)數(shù)據(jù)的格式化了。1.標(biāo)準(zhǔn)格式說(shuō)明符標(biāo)準(zhǔn)格式說(shuō)明符定義了人們常用的8種數(shù)據(jù)表示形式,如表5.1所示。,5.2.2格式化說(shuō)明符,表5.1標(biāo)準(zhǔn)格式說(shuō)明符,5.2.2格式化說(shuō)明符,標(biāo)準(zhǔn)格式的一般形式是:{N[,M][:Yn]}其中:N表示輸出變量的序號(hào)。N為0對(duì)應(yīng)輸出的第1個(gè)變量,N為1則對(duì)應(yīng)輸出的第2個(gè)變量,依次類(lèi)推。[,M]是可選項(xiàng)。M表示輸出的變量在控制臺(tái)中所占據(jù)的字符個(gè)數(shù),如果該數(shù)字為負(fù)數(shù),則輸出按照左對(duì)齊方式;如果該數(shù)字為正數(shù),則輸出按照右對(duì)齊的方式。[:Yn]是可選項(xiàng)。Y是格式化說(shuō)明符,它指的是數(shù)據(jù)的輸出格式說(shuō)明符(如表5.1所示),這些字符是由系統(tǒng)定義的,它們基本涵蓋了.NET框架定義的所有數(shù)值類(lèi)型數(shù)據(jù)的表現(xiàn)形式。n為一個(gè)正整數(shù),表示了數(shù)據(jù)的精度范圍(有效數(shù)字范圍),它用于控制當(dāng)前數(shù)據(jù)在格式化后表現(xiàn)出來(lái)的有效數(shù)字個(gè)數(shù)。貨幣金額格式字符“C或c”用來(lái)組成將數(shù)據(jù)轉(zhuǎn)換為貨幣金額格式的字串,在字符“C或c”后面的數(shù)字定義了貨幣金額數(shù)據(jù)小數(shù)點(diǎn)后保留的數(shù)字個(gè)數(shù),如果沒(méi)有定義任何數(shù)字,則默認(rèn)小數(shù)點(diǎn)后保留2位數(shù)字。例如:inta=123456;doubled=1234.5678;stringstr1=String.Format("{0:c}",a);//得到的字串是"¥123,456.00"stringstr2=String.Format("{0:c}",d);//得到的字串是"¥1,234.57"stringstr3=String.Format("{0:c4}",a);//得到的字串是"¥123,456.0000"stringstr4=String.Format("{0:c4}",d);//得到的字串是"¥1,234.5678"stringstr5=d.ToString("c");//得到的字串是"¥1,234.57"stringstr6=d.ToString("c4");//得到的字串是"¥1,234.5678",5.2.2格式化說(shuō)明符,提示:所顯示的貨幣金額符號(hào)同用戶使用的操作系統(tǒng)有關(guān),如果本例在Windows2000Professional英文版中運(yùn)行,則結(jié)果中顯示的貨幣符號(hào)是$;如果我們使用的是中文版操作系統(tǒng),則將會(huì)顯示的貨幣符號(hào)可能就是¥。,5.2.2格式化說(shuō)明符,整數(shù)數(shù)據(jù)格式字符“D或d”用來(lái)組成將數(shù)據(jù)表示為十進(jìn)制整數(shù)數(shù)據(jù)的格式化字符串。字符“D或d”后面的數(shù)字規(guī)定了要表示的數(shù)據(jù)位數(shù),如果這個(gè)數(shù)字小于整數(shù)數(shù)據(jù)的位數(shù),則顯示所有的整數(shù)位;如果這個(gè)數(shù)字大于整數(shù)數(shù)據(jù)的位數(shù),則在整數(shù)數(shù)據(jù)的前面用數(shù)字“0”補(bǔ)足所有的位數(shù)。例如:inta=123456;stringstr1=String.Format("{0:d}",a);//得到的字串是"123456"stringstr2=String.Format("{0:d6}",a);//得到的字串是"123456"stringstr3=String.Format("{0:d7}",a);//得到的字串是"0123456"stringstr4=a.ToString("d");//得到的字串是"123456"stringstr5=a.ToString("d7");//得到的字串是"0123456"科學(xué)計(jì)數(shù)法格式字符“E或e”用來(lái)將數(shù)據(jù)轉(zhuǎn)換為科學(xué)計(jì)數(shù)法形式。在字符“E或e”后面的數(shù)字用來(lái)規(guī)定科學(xué)計(jì)數(shù)法表示數(shù)據(jù)的小數(shù)點(diǎn)后數(shù)字的個(gè)數(shù)。如字符“E或e”后面沒(méi)有數(shù)字,則顯示7位有效數(shù)字。例如:inta=123456;doubled=1234.5678;stringstr1=String.Format("{0:e}",a);//得到的字串是"1.234560e+005"stringstr2=String.Format("{0:e}",d);//得到的字串是"1.234568e+003"stringstr3=String.Format("{0:e4}",a);//得到的字串是"1.2346e+005"stringstr4=String.Format("{0e4}",d);//得到的字串是"1.2346e+003"stringstr5=a.ToString("E");//得到的字串是"1.234560E+005"stringstr6=d.ToString("E4");//得到的字串是"1.2346E+003"浮點(diǎn)數(shù)據(jù)格式字符“F或f”用來(lái)描述帶有小數(shù)點(diǎn)的數(shù)據(jù)的顯示形式。字符“F或f”后面的數(shù)字規(guī)定了小數(shù)點(diǎn)后的數(shù)據(jù)位數(shù)。如果沒(méi)有指定數(shù)字,則數(shù)據(jù)默認(rèn)保留兩位小數(shù),如果指定的數(shù)字大于數(shù)據(jù)本身小數(shù)部分的位數(shù),則在小數(shù)部分?jǐn)?shù)字的最后補(bǔ)“0”。,5.2.2格式化說(shuō)明符,自然數(shù)據(jù)格式字符“N或n”用來(lái)表示自然數(shù)據(jù)格式。這種數(shù)據(jù)格式將數(shù)據(jù)格式化成帶逗號(hào)和小數(shù)點(diǎn),即表示為“dd,ddd,ddd.dd”的形式。這種數(shù)字分組的表示形式多用于一些正規(guī)的場(chǎng)合,便于直觀了解數(shù)據(jù)的大小量級(jí)。字符“N或n”后面的數(shù)字規(guī)定了數(shù)據(jù)格式中小數(shù)點(diǎn)后面的數(shù)字個(gè)數(shù)。inta=123456;doubled=1234.5678;stringstr1=String.Format("{0:n}",a);//得到的字串是"123,456.00"stringstr2=String.Format("{0:n}",d);//得到的字串是"1,234.57"stringstr3=a.ToString("n4");//得到的字串是"123,456.0000"stringstr4=d.ToString("n4");//得到的字串是"1,234.5678"十六進(jìn)制數(shù)據(jù)格式字符“X或x”用于將數(shù)據(jù)表示為十六進(jìn)制格式。字符“X或x”后面的數(shù)字表示了格式化數(shù)據(jù)的數(shù)字個(gè)數(shù),其規(guī)定與整數(shù)數(shù)據(jù)格式類(lèi)似。例如:inta=123456;stringstr1=String.Format("{0:x}",a);//得到的字串是"1e240"stringstr2=a.ToString("x5");//得到的字串是"1e240"stringstr3=a.ToString("x6");//得到的字串是"01e240"stringstr4=a.ToString("x7");//得到的字串是"001e240"保持精度(來(lái)回轉(zhuǎn)換)將數(shù)字從一種格式轉(zhuǎn)換為另一種格式時(shí),可能會(huì)降低精度。字符“R或r”用于將字符串轉(zhuǎn)換為數(shù)字是保持其精度。使用該格式說(shuō)明符后,運(yùn)行時(shí)環(huán)境將盡可能保持原有數(shù)字的精度。,5.2.2格式化說(shuō)明符,2.自定義數(shù)字格式說(shuō)明符有時(shí)候,需要更精確地按某種意圖控制數(shù)字的格式,比如格式化駕駛證號(hào)或社會(huì)保險(xiǎn)號(hào)時(shí),可能想加入短劃線;而對(duì)于電話號(hào)碼,則想加入括號(hào)和短劃線等,這時(shí)就需要使用一些自定義的格式說(shuō)明符來(lái)實(shí)現(xiàn)所需的數(shù)據(jù)格式。表5.2所示為自定義數(shù)據(jù)格式說(shuō)明符。,5.2.2格式化說(shuō)明符,表5.2自定義數(shù)據(jù)格式說(shuō)明符,5.2.2格式化說(shuō)明符,【例5.5】使用自定義說(shuō)明符顯示特殊數(shù)據(jù)格式(用WriteLine()方法實(shí)現(xiàn)輸出)。usingSystem;usingSystem.Globalization;classCustomFormat1{publicstaticvoidMain(){inta=1234;floatb=12.34f;//"0"格式化說(shuō)明符Console.WriteLine("\n"0"格式化說(shuō)明符:");Console.WriteLine("{0}?{0:0000000}",a);Console.WriteLine("{0}?{0:0000000}",b);//"#"格式化說(shuō)明符Console.WriteLine("\n"#"格式化說(shuō)明符:");Console.WriteLine("{0}?{0:0####}",a);Console.WriteLine("{0}?{0:0####}",b);//","格式化說(shuō)明符Console.WriteLine("\n","格式化說(shuō)明符:");Console.WriteLine("{0}?{0:0,,}",1000000);//","用作倍增器Console.WriteLine("{0}?{0:##,###,##0}",2000000);//","用作分隔符Console.WriteLine("{0}?{0:##,###,##0}",3);//"%"格式化說(shuō)明符Console.WriteLine("\n"%"格式化說(shuō)明符:");Console.WriteLine("{0}?{0:0%}",a);//將原數(shù)乘100%Console.WriteLine("{0}?{0:0%}",b);//單引號(hào)格式化說(shuō)明符Console.WriteLine("\n單引號(hào)格式化說(shuō)明符:");Console.WriteLine("{0}?{0:mynumberis:0}",a);Console.WriteLine("{0}?{0:mynumberis:0}",b);Console.WriteLine("{0}?{0:mine:0}",a);Console.WriteLine("{0}?{0:mine:0}",b);}},5.2.2格式化說(shuō)明符,程序的執(zhí)行結(jié)果:"0"格式化說(shuō)明符:1234?000123412.34?0000012"#"格式化說(shuō)明符:1234?0123412.34?00012","格式化說(shuō)明符:1000000?12000000?2,000,0003?3"%"格式化說(shuō)明符:1234?123400%12.34?1234%單引號(hào)格式化說(shuō)明符:1234?mynumberis:123412.34?mynumberis:121234?mine:123412.34?mine:12,5.2.2格式化說(shuō)明符,【例5.6】使用for循環(huán)創(chuàng)建一個(gè)負(fù)數(shù),然后將其遞增為0和正數(shù)。并且可以使用同一個(gè)WriteLine來(lái)顯示它們。本例將給出3種不同的情況。usingSystem;classCustomFormat2{publicstaticvoidMain(){Console.WriteLine("\n第一種情況");for(intx=-100;x<=100;x+=100){Console.WriteLine("{0:000;-00000;0}",x);}Console.WriteLine("\n第二種情況");for(intx=-100;x<=100;x+=100){Console.WriteLine("{0:正數(shù):0;負(fù)數(shù):-0;零:0}",x);}Console.WriteLine("\n第三種情況");for(intx=-100;x<=100;x+=100){Console.WriteLine("{0:father:-0;mother:0;brother:0}",x);}}},5.2.2格式化說(shuō)明符,程序運(yùn)行結(jié)果:第一種情況-001000100第二種情況負(fù)數(shù):-100零:0正數(shù):100第三種情況mother:100brother:0father:-100,5.2.2格式化說(shuō)明符,3.格式化日期和時(shí)間獲取日期和時(shí)間C#和.NET框架提供了一個(gè)用于存儲(chǔ)日期和時(shí)間的類(lèi)System.DateTime,我們可通過(guò)DateTime類(lèi)獲取完整的日期和時(shí)間。DateTime類(lèi)常用的3種使用格式:DateTime(intyear,intmonth,intday);DateTime(intyear,intmonth,intday,inthour,intminute,intsecond);DateTime(intyear,intmonth,intday,inthour,intminute,intsecond,intmillisecond);我們只要按要求給出所要表示的日期和時(shí)間的整數(shù)數(shù)值就可以構(gòu)造出DateTime類(lèi)的對(duì)象。例如,建立一個(gè)對(duì)象表示2002年10月1日上午8點(diǎn)30分15秒,可以用以下語(yǔ)句實(shí)現(xiàn):DateTimemydate=newDateTime(2002,10,1,8,30,15);//生成一個(gè)DateTime類(lèi)的對(duì)象DateTime類(lèi)包含許多很有用的屬性和方法,用于表示當(dāng)前日期和時(shí)間等信息,DateTime類(lèi)的屬性如表5.3所示。,5.2.2格式化說(shuō)明符,表5.3DateTime類(lèi)的屬性,5.2.2格式化說(shuō)明符,續(xù)表,5.2.2格式化說(shuō)明符,以上屬性都是靜態(tài)屬性,因此可以直接通過(guò)類(lèi)名來(lái)取得它們的值,不需要通過(guò)對(duì)象來(lái)調(diào)用,例如:DateTime.NowDateTime.Today【例5.7】獲取日期和時(shí)間。usingSystem;usingSystem.Globalization;classDateTime1{publicstaticvoidMain(){DateTimedate=newDateTime(2002,10,1);//構(gòu)造一個(gè)DateTime對(duì)象2002年10月1日Console.WriteLine(date);Console.WriteLine(date.DayOfWeek);//對(duì)象的星期數(shù)Console.WriteLine(date.DayOfYear);//對(duì)象的日期在一年中的序號(hào)Console.WriteLine(date.TimeOfDay);//對(duì)象的時(shí)間Console.WriteLine(DateTime.Now);//調(diào)用DateTime的靜態(tài)屬性,獲取程序運(yùn)行的當(dāng)前時(shí)間}}運(yùn)行結(jié)果:2002-10-100:00:00//在創(chuàng)建DateTime對(duì)象時(shí),由于沒(méi)有指定時(shí)間數(shù)值,所以時(shí)間數(shù)值為0Tuesday//星期二274//2002年的第274天00:00:002003-4--121:53:12,5.2.2格式化說(shuō)明符,格式化日期和時(shí)間數(shù)據(jù)在日常生活中,我們表示時(shí)間和日期的形式有多種。例如2002年10月1日16:00是一種表達(dá)方式,而這一日期和時(shí)間也可表示為:10/1/20024:00PM,除了這兩種形式外,還有多種表達(dá)方式。如何讓程序在輸出時(shí)能顯示我們想要的日期和時(shí)間格式呢?在DateTime類(lèi)中封裝了Write()方法,可以用來(lái)進(jìn)行日期時(shí)間的格式化操作。日期和時(shí)間數(shù)據(jù)的格式化說(shuō)明符如表5.4所示。,5.2.2格式化說(shuō)明符,表5.4日期和時(shí)間格式化說(shuō)明符,注:表5.4中,d表示日期;m表示月份;y表示年份;h表示小時(shí);m表示分鐘;s表示秒;GMT表示國(guó)際標(biāo)準(zhǔn)時(shí)間。,5.2.2格式化說(shuō)明符,【例5.8】日期時(shí)間格式。usingSystem;usingSystem.Globalization;classDateTime2{publicstaticvoidMain(){//使用Format方法DateTimemydate1=newDateTime(2001,10,1,16,0,0);//構(gòu)建對(duì)象//使用Write()方法DateTimemydate2=mydate1;Console.WriteLine("d:{0:d}",mydate2);Console.WriteLine("D:{0:D}",mydate2);Console.WriteLine("f:{0:f}",mydate2);Console.WriteLine("F:{0:F}",mydate2);Console.WriteLine("g:{0:g}",mydate2);Console.WriteLine("G:{0:G}",mydate2);Console.WriteLine("m:{0:m}",mydate2);Console.WriteLine("M:{0:M}",mydate2);Console.WriteLine("r:{0:r}",mydate2);Console.WriteLine("R:{0:R}",mydate2);Console.WriteLine("s:{0:s}",mydate2);//Console.WriteLine("S:{0:S}",mydate2);//錯(cuò)誤!Console.WriteLine("u:{0:u}",mydate2);Console.WriteLine("d:{0:y}",mydate2);Console.WriteLine("Y:{0:Y}",mydate2);}}讀者可以上機(jī)運(yùn)行該程序,并將結(jié)果與表5.4的內(nèi)容進(jìn)行比較,以便深刻理解和領(lǐng)會(huì)日期時(shí)間數(shù)據(jù)的格式。,5.3處理字符串的方法,5.3.1String類(lèi)的字符串方法5.3.2StringBuilder類(lèi)的字符串方法5.3.3Parse()方法5.3.4Convert類(lèi),,5.3處理字符串的方法,前面已介紹了關(guān)于格式化字符串的所有知識(shí),由于字符串是一種特殊的數(shù)據(jù)類(lèi)型,所以介紹有關(guān)方面深入的應(yīng)用問(wèn)題。,5.3.1String類(lèi)的字符串方法,字符串變量是由關(guān)鍵字string來(lái)定義的,而String是System命名空間中的一個(gè)類(lèi),所以對(duì)字符串進(jìn)行操作可以調(diào)用String類(lèi)的所有屬性和方法。String類(lèi)的方法調(diào)用格式為:String.方法名()表5.5列出了一些String類(lèi)常用的處理字符串的方法。有關(guān)表中方法的參數(shù)和String類(lèi)的其他方法可參見(jiàn)MSDN文檔。,5.3.1String類(lèi)的字符串方法,表5.5String類(lèi)常用的字符串方法,5.3.1String類(lèi)的字符串方法,續(xù)表,5.3.2StringBuilder類(lèi)的字符串方法,當(dāng)我們調(diào)用字符串方法進(jìn)行字符串的修改時(shí),實(shí)際上將創(chuàng)建一個(gè)新的字符串,而存儲(chǔ)在字符串中的某個(gè)字符是不能修改的。例如:以下代碼運(yùn)行后字符串中的字符不能被修改。usingSystem;classStringError{publicstaticvoidMain(){stringstr="abcdefghijklmnop";//字符串雖是由字符數(shù)組組成,但不能將其中第6個(gè)字符改為X,!str[5]=X;//程序運(yùn)行會(huì)出錯(cuò)Console.WriteLine(str);}}程序運(yùn)行后原字符串沒(méi)有被修改,并且系統(tǒng)不正常退出。在實(shí)際應(yīng)用中,使用表5.5中列出的處理字符串的方法時(shí),需要為處理后的新字符串另設(shè)一個(gè)空的存儲(chǔ)空間(即創(chuàng)建一個(gè)新的字符串對(duì)象)。例如,在本例中需要先將前5個(gè)字符復(fù)制到另一個(gè)存儲(chǔ)空間,然后輸入第6個(gè)字符,最后將從第7個(gè)字符開(kāi)始的字符串復(fù)制到后面。如果確實(shí)需要修改字符串,則應(yīng)該使用C#提供的StringBuilder類(lèi)。命名空間System.Text中的StringBuilder類(lèi)用于創(chuàng)建存儲(chǔ)可修改字符串的對(duì)象。使用StringBuilder類(lèi)創(chuàng)建的對(duì)象與用String類(lèi)創(chuàng)建的字符串類(lèi)似,差別在于后者創(chuàng)建的字符串不能被修改,當(dāng)要修改或操縱字符串時(shí),必須再另創(chuàng)建一個(gè)新的字符串對(duì)象。而StringBuilder類(lèi)的對(duì)象包含的字符串信息可以被修改,該類(lèi)的方法也可直接操縱字符串中存儲(chǔ)的值。表5.6列出了StringBuilder類(lèi)的方法和屬性。,5.3.2StringBuilder類(lèi)的字符串方法,表5.6StringBuilder類(lèi)的方法和屬性,5.3.2StringBuilder類(lèi)的字符串方法,有關(guān)表5.6中方法的參數(shù)和StringBuilder類(lèi)的其他方法可參見(jiàn)MSDN文檔?!纠?.9】使用StringBuilder類(lèi)。usingSystem;usingSystem.Text;//為了引用StringBuilder類(lèi)classBuildName{publicstaticvoidMain(){StringBuilderchgstr=newStringBuilder();//創(chuàng)建名為chgstr的StringBuilder對(duì)象stringbuffer;//創(chuàng)建名為buffer的字符串用于取得用戶輸入的信息intmarker=0;Console.Write("請(qǐng)輸入您的姓:");//讀取"姓"buffer=Console.ReadLine();if(buffer!=null){chgstr.Append(buffer);//將姓追加到StringBuilder類(lèi)的對(duì)象chgstr中marker=chgstr.Length;//將姓的長(zhǎng)度賦給變量marker,該變量被用來(lái)確定放置"中名"的位置},5.3.2StringBuilder類(lèi)的字符串方法,Console.Write("請(qǐng)輸入您的姓名的最后一個(gè)字:");//讀"名"buffer=Console.ReadLine();if(buffer!=null){chgstr.Append("");//加一個(gè)空格chgstr.Append(buffer);//將buffer中字符串追加到chgstr中}Console.Write("請(qǐng)輸入您的中名:");//讀"中名"buffer=Console.ReadLine();if(buffer!=null){chgstr.Insert(marker+1,buffer);//將中名插入chgstr對(duì)象的中間chgstr.Insert(marker+buffer.Length+1,"");//在"中名"后插入空格}Console.WriteLine("您的全名是:{0}",chgstr);//顯示全名Console.WriteLine("您的全名長(zhǎng)度:{0}",chgstr.Length);//輸出chgstr對(duì)象當(dāng)前存儲(chǔ)的值的長(zhǎng)度}}程序的輸出結(jié)果:請(qǐng)輸入您的姓:劉(回車(chē))請(qǐng)輸入您的姓名的最后一個(gè)字:南(回車(chē))請(qǐng)輸入您的中名:泳您的全名是:劉泳南您的全名長(zhǎng)度:5,5.3.3Parse()方法,上節(jié)介紹的Format方法和ToString方法,都是用來(lái)將數(shù)字轉(zhuǎn)換為相應(yīng)格式的字符串輸出。而與這些方法相對(duì)應(yīng)的Parse()方法則可以將字符串轉(zhuǎn)換為數(shù)值類(lèi)型數(shù)據(jù),且被轉(zhuǎn)換的字串可以包含格式化數(shù)據(jù),也可以是由數(shù)字字符組成的字串。調(diào)用Parse()方法的常用格式:publicstatic數(shù)據(jù)類(lèi)型.Parse(strings);【例5.10】數(shù)字和字串的相互轉(zhuǎn)換。usingSystem;usingSystem.Globalization;classEachother{publicstaticvoidMain(){inta;doubled;stringstr;str=Console.ReadLine();//控制臺(tái)輸入整數(shù)數(shù)字字串a(chǎn)=int.Parse(str);//將字串轉(zhuǎn)換為整數(shù)Console.WriteLine(a+11111);str=Console.ReadLine();//控制臺(tái)輸入雙精度數(shù)字字串d=double.Parse(str);//將字串轉(zhuǎn)換為雙精度數(shù)Console.WriteLine(d+0.11);}}程序運(yùn)行結(jié)果:12345(回車(chē))23456123.45(回車(chē))123.56,5.3.4Convert類(lèi),在實(shí)際應(yīng)用中,使用Read()和ReadLine()方法讀取數(shù)據(jù)的關(guān)鍵,不僅僅是要取得信息,而是想將獲得的信息轉(zhuǎn)換為想要的格式。如對(duì)字符串中的文本進(jìn)行過(guò)濾,得到一個(gè)不同的字符串,或?qū)⑵滢D(zhuǎn)換為一種不同的數(shù)據(jù)類(lèi)型。System命名空間中有一個(gè)用于將某個(gè)基本數(shù)據(jù)類(lèi)型轉(zhuǎn)換為另一個(gè)基本數(shù)據(jù)類(lèi)型的Convert類(lèi)。Convert類(lèi)包含了大量的可將數(shù)據(jù)轉(zhuǎn)換為不同的數(shù)據(jù)類(lèi)型的靜態(tài)方法,由于是靜態(tài)方法,所以可直接使用以下語(yǔ)句格式調(diào)用:Convert.方法名(原數(shù)據(jù)變量);其中:“方法”名是要使用的轉(zhuǎn)換方法。表5.7列出了Convert類(lèi)轉(zhuǎn)換數(shù)據(jù)類(lèi)型的一些方法?!霸瓟?shù)據(jù)變量”是想要轉(zhuǎn)換為新類(lèi)型的數(shù)據(jù)變量。,5.3.3Parse()方法,表5.7Convert類(lèi)轉(zhuǎn)換數(shù)據(jù)類(lèi)型的方法,5.3.3Parse()方法,使用Convert類(lèi)的前提條件是用using語(yǔ)句引用命名空間System.Text。Convert類(lèi)位于基類(lèi)庫(kù)中,所以可在其他編程語(yǔ)言中使用這個(gè)類(lèi)。注意,Convert類(lèi)的方法將數(shù)據(jù)轉(zhuǎn)換為基數(shù)據(jù)類(lèi)型,而不是C#數(shù)據(jù)類(lèi)型,但我們知道每種C#數(shù)據(jù)類(lèi)型都有相應(yīng)的基類(lèi)型。有關(guān)方法的參數(shù)和Conver類(lèi)的其他方法可參見(jiàn)MSDN文檔。【例5.11】使用Convert類(lèi)的方法,將讀取的字符串轉(zhuǎn)換為一個(gè)整數(shù)。usingSystem;usingSystem.Text;//為了使用Convert類(lèi)classUseConvert{publicstaticvoidMain(){stringbuff;intage;Console.Write("請(qǐng)輸入您的年齡:");buff=Console.ReadLine();try//捕獲異常{age=Convert.ToInt32(buff);//將輸入的年齡字串轉(zhuǎn)換為32位整數(shù)if(ageUseConvert請(qǐng)輸入您的年齡:19你不到21歲。后年你的年齡是:21d:\>UseConvert請(qǐng)輸入您的年齡:40你是21歲或已超過(guò)21歲。后年你的年齡是:42d:\>UseConvert請(qǐng)輸入您的年齡:99999999999youenteredanumberthatistoobigortoosmall.d:\>UseConvert請(qǐng)輸入您的年齡:abcyoudidntenteravalidnumber,Q&A?Thanks!,,- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- C# 編程 應(yīng)用程序 開(kāi)發(fā) 電子 課件 第五
鏈接地址:http://appdesigncorp.com/p-11494336.html