C编程及应用程序开发第电子_第1页
C编程及应用程序开发第电子_第2页
C编程及应用程序开发第电子_第3页
C编程及应用程序开发第电子_第4页
C编程及应用程序开发第电子_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

会计学1C编程及应用程序开发第电子第5章数据的输入和输出5.1控制台输入5.2控制台输出5.3处理字符串的方法第1页/共51页5.1控制台输入5.1.1Console.Read()方法

5.1.2Console.ReadLine()方法第2页/共51页5.1控制台输入System.Console类的Read()和ReadLine()方法可用来实现控制台输入,本节我们将详细介绍如何使用这两种方法获取输入。第3页/共51页5.1.1Console.Read()方法Read()方法每次从输入流(控制台)中读取一个字符,直到收到Enter键才返回。将接收的字符以int型(32位整数)值返回给变量;如果输入流中没有数据,则返回-1。Read()方法是一个静态方法,我们可以直接通过类名Console调用它,调用的格式为Console.Read。Read()方法的原型为:publicstaticintRead()。如果我们输入了多个字符,然后按Enter键(此时输入流中将包含用户输入的字符,加上Enter键和换行符‘\r\n’),则Read()方法只返回用户输入的第一个字符。但我们可通过对程序的循环控制,多次调用Read()方法来获取所有输入的字符。Read()方法返回给变量的数据的类型是32位整数,如果需要得到输入的字符,则必须通过数据类型显式转换才可以得到相应的字符。第4页/共51页5.1.1Console.Read()方法【例5.1】Read()方法的使用。usingSystem;classMyRead1{publicstaticvoidMain(){inta;charch;Console.Write("请从键盘输入一个字符:");a=Console.Read();//程序运行到Read方法会暂停,直到用户在控制台中按任意键

ch=(char)a;//显式类型转换

Console.WriteLine(a);Console.WriteLine(ch);}}程序运行结果:请从键盘输入一个字符:a(回车)97a第5页/共51页5.1.1Console.Read()方法【例5.2】通过Read()方法从控制台接收用户输入的一系列字符,然后把用户输入的内容显示出来。usingSystem;classMyRead2{publicstaticvoidMain(string[]args){stringbuf;Console.Write("请输入字符串(按Enter键接收输入,按x键退出程序):");buf="";while(true){intc=Console.Read();//接收一个字符

if((char)c=='x'&&(char)c=='X')return;//按下'x'或'X'键,退出本程序

if(c==-1)Console.WriteLine("不输入");buf+=(char)c;//将字符组成字符串

if(c=='\n')break;}Console.Write("用户输入的内容为:");

Console.WriteLine("{0}",buf);}}在本程序中,可以一次输入单个字符,也可以一次输入多个字符。当按下x或X键再按下Enter键后将会退出本程序。第6页/共51页5.1.2Console.ReadLine()方法

ReadLine()方法用于从控制台中一次读取一行字符串,直到遇到Enter键才返回读取的字符串。但此字符串中不包含Enter键和换行符(‘\r\n’)。如果没有收到任何输入,或接收了无效的输入,那么ReadLine()方法将返回null。ReadLine()方法也是一个静态方法,可以直接通过类名Console来调用它,调用的格式为Console.ReadLine。ReadLine()方法的原型为:publicstaticstringReadLine()第7页/共51页5.1.2Console.ReadLine()方法

【例5.3】使用ReadLine()方法。usingSystem;classMyReadline{publicstaticvoidMain(){inti;stringstr;Console.Write("请输入你的姓名:");str=Console.ReadLine();Console.Write("用户的姓名为:");Console.WriteLine(str);}}程序的运行结果:请输入你的姓名:王红(回车)用户的姓名为:王红第8页/共51页5.2控制台输出5.2.1数据的格式化

5.2.2格式化说明符第9页/共51页5.2控制台输出在前述的各章节中,我们同样也多次使用了

Console类的Write()和WriteLine()方法来输出程序的计算结果。日常生活中,有时我们不仅仅要求程序简单地输出数据,还要求能输出具有一定格式的数据,以丰富我们应用程序的应用需求。第10页/共51页5.2.1数据的格式化

在日常生活中,各行各业的数据表示形式有多种。例如,一个十进制数字965840,可能有以下表示形式:表示人民币:¥9,658.40表示美元:$9,658.40用于科学计算:9.65840×105,在C#中表示为9.65840E5可见,对于一个程序来说,它的计算结果只是一个无任何语义的数字。所以如果希望一个应用程序的计算结果在输出时能反映出它的应用特征,则必须在程序的输出语句中给出所需数据格式的转换控制。C#语言具有将数字在不同的表示形式之间相互转换的功能——数据的格式化。数据的格式化是指通过程序(方法),将数据的表现形式转换为一定样式的过程。C#语言是通过.NET类库方法、格式化字符串以及其他的控制信息共同完成的。第11页/共51页5.2.1数据的格式化

一般实现把数字转换为指定格式的字符串输出的基本方式有3种:Write()和WriteLine()方法可以直接把数值类型变量的值,转换成字符串输出到控制台中,并可使用格式说明符来控制输出的数据格式。Write()方法用来向控制台输出一条信息,并且光标仍在输出信息的末尾。一般Write()方法中有以下两种常用的形式:publicstaticvoidWrite(数值数据类型变量);//直接输出变量的值publicstaticvoidWrite("{N[,M][:Yn]}",变量1,变量2…);其中:

N——表示输出变量的序号。N为0对应输出的第1个变量,N为1则对应输出的第2个变量,依次类推。

[,M]——可选项。M表示输出的变量在控制台中所占据的字符个数,如果该数字为负数,则输出按照左对齐方式;如果该数字为正数,则输出按照右对齐的方式。

[:Yn]——可选项。其中Y是格式化字符串,它指的是数据的输出格式说明符,将在5.2.2节中给出。n为一个正整数。表示了数据的精度范围(有效数字范围),它用于控制当前数据在格式化后表现出来的有效数字个数。例如:inta=32767;doubled=456.56789;Console.Write("a=0x{0,8:X}\td={1,10:F3}",a,d);Console.Write("a=0x{0,-8:X}\td={1,-10:F3}",a,d);输出结果:a=0x7fff d=456.568a=0x7fff d=456.568本例中的格式说明符X和F在5.2.2节中给出说明。第12页/共51页5.2.1数据的格式化

WriteLine()方法用来向控制台产生一行信息,并在信息的尾部自动添加“\r\n”操作符,即输出信息后光标自动移到下一新行。同Write()方法类似,WriteLine方法有以下两种常用的形式:publicstaticvoidWriteLine(数值数据类型变量);publicstaticvoidWriteLine("{N[,M][:Y]}",变量1,变量2…);WriteLine()方法的参数与Write()方法的参数意义一样。例如:inta=32767;doubled=456.56789;Console.WriteLine("a=0x{0,8:X}\td={1,10:F3}",a,d);Console.WriteLine("a=0x{0,-8:X}\td={1,-10:F3}",a,d);输出结果:a=0x7fffd=456.568a=0x7fff d=456.568可见此例输出结果与Write()方法不同的是每一个WriteLine()方法输出一行信息后自动换行。第13页/共51页5.2.1数据的格式化

调用ToString方法中使用格式说明符。

ToString方法是System.Object类中的一个方法,此方法可以将变量的值转换为由数字、数学符号等组成的字符串。由于所有的类都是从Object类中派生出来的,因此,所有的对象都可以使用ToString方法,例如各种基本数据类型(int32、int64)等。ToString方法的调用格式为:类对象名称.ToString(“格式说明符”)例如:intvar=8769;stringstr=var.ToString("C"); //使用ToString()方法,将整型数转换为金额格式表示输出结果将是:¥8,769.00其中格式说明符C是用于金额的格式说明符,我们将在5.2.2节中介绍。调用String类的Format静态方法。

Format()方法可用于将信息格式化为一个新的字符串。由于Format()方法是静态的,因此可以以String.Format的方式直接调用。Format方法常用的使用格式:stringstr=String.Format("{N[,M][:Yn]}",变量1,变量2,….);其中:str是格式化后得到的字符串;其他的参数与Write和WriteLine方法中的参数相同。Format()方法还有两种使用格式可参阅MSDN文档。第14页/共51页5.2.1数据的格式化

【例5.4】基本的格式化方法。usingSystem;classMyFormat{publicstaticvoidMain(){inta=34567;Console.WriteLine("使用WriteLine格式化数据:");Console.WriteLine("\n{0:C}\n{0:C4}",a);Console.WriteLine("\n{0:F}\n{0:F4}",a);Console.WriteLine("使用ToString格式化数据:");stringstr1=a.ToString("c");stringstr2=a.ToString("c3");Console.WriteLine(str1);Console.WriteLine(str2);Console.WriteLine("使用String.Format格式化数据:");stringstr4=String.Format("我们也能使用String.Format格式化数据:");stringstr5=String.Format("\n{0:c}\n{0:c0}",a);Console.WriteLine(str4);Console.WriteLine(str5);}}第15页/共51页5.2.1数据的格式化

程序运行结果:使用WriteLine格式化数据:¥34,567.00¥34,567.000034567.0034567.0000使用ToString格式化数据:¥34,567.00¥34,567.000使用String.Format格式化数据:¥34,567.00我们也能使用String.Format格式化数据:¥34,567在本例中将变量a中的数字格式化为金额、小数,其中的说明符将在5.2.2节中详细介绍。第16页/共51页5.2.2格式化说明符

.NET框架体系规定可以使用两种格式进行数据的格式化:一种是由系统定义的标准格式,另一种是用户自定义格式。这两种格式主要包含了各种用于格式化数据的格式控制字符,使用这些控制字符组成所需的数据格式,然后由5.2.1节中所述3种格式化方式即可实现数据的格式化了。1.标准格式说明符标准格式说明符定义了人们常用的8种数据表示形式,如表5.1所示。第17页/共51页5.2.2格式化说明符

格式说明符描述输出样式输出范例C或c货币金额格式$xx,xxx.xx(如果在中文操作系统中使用,货币符号为¥)$12,345.67D或d整数数据格式[-]xxxxxxx[-]1234567E或e科学计数法格式[-]x.xxxxE+xxx[-]x.xxxxE-xxx[-]1.234567E+123[-]1.234567E-123F或f浮点数据格式[-]xxxxxx.xx[-]1234567.89G或g通用数据格式随具体情况而定,将使用最紧凑的格式N或n自然数据格式[-]xx,xxx.xx[-]12,345.67X或x十六进制数据格式返回数据的十六进制数据表示方式12d654R或r来回转换(roundtrip)将数字转换为字符串后,再转换为数字时,精度不变表5.1标准格式说明符第18页/共51页5.2.2格式化说明符

标准格式的一般形式是:{N[,M][:Yn]}其中:N表示输出变量的序号。N为0对应输出的第1个变量,N为1则对应输出的第2个变量,依次类推。[,M]是可选项。M表示输出的变量在控制台中所占据的字符个数,如果该数字为负数,则输出按照左对齐方式;如果该数字为正数,则输出按照右对齐的方式。[:Yn]是可选项。Y是格式化说明符,它指的是数据的输出格式说明符(如表5.1所示),这些字符是由系统定义的,它们基本涵盖了.NET框架定义的所有数值类型数据的表现形式。n为一个正整数,表示了数据的精度范围(有效数字范围),它用于控制当前数据在格式化后表现出来的有效数字个数。货币金额格式

字符“C或c”用来组成将数据转换为货币金额格式的字串,在字符“C或c”后面的数字定义了货币金额数据小数点后保留的数字个数,如果没有定义任何数字,则默认小数点后保留2位数字。例如: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"第19页/共51页5.2.2格式化说明符

提示:所显示的货币金额符号同用户使用的操作系统有关,如果本例在

Windows2000Professional英文版中运行,则结果中显示的

货币符号是$;如果我们使用的是中文版操作系统,则将会显

示的货币符号可能就是¥。第20页/共51页5.2.2格式化说明符整数数据格式

字符“D或d”用来组成将数据表示为十进制整数数据的格式化字符串。字符“D或d”后面的数字规定了要表示的数据位数,如果这个数字小于整数数据的位数,则显示所有的整数位;如果这个数字大于整数数据的位数,则在整数数据的前面用数字“0”补足所有的位数。例如: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"科学计数法格式

字符“E或e”用来将数据转换为科学计数法形式。在字符“E或e”后面的数字用来规定科学计数法表示数据的小数点后数字的个数。如字符“E或e”后面没有数字,则显示7位有效数字。例如: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"浮点数据格式

字符“F或f”用来描述带有小数点的数据的显示形式。字符“F或f”后面的数字规定了小数点后的数据位数。如果没有指定数字,则数据默认保留两位小数,如果指定的数字大于数据本身小数部分的位数,则在小数部分数字的最后补“0”。第21页/共51页5.2.2格式化说明符自然数据格式

字符“N或n”用来表示自然数据格式。这种数据格式将数据格式化成带逗号和小数点,即表示为“dd,ddd,ddd.dd”的形式。这种数字分组的表示形式多用于一些正规的场合,便于直观了解数据的大小量级。字符“N或n”后面的数字规定了数据格式中小数点后面的数字个数。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"十六进制数据格式

字符“X或x”用于将数据表示为十六进制格式。字符“X或x”后面的数字表示了格式化数据的数字个数,其规定与整数数据格式类似。例如:inta=123456;stringstr1=String.Format("{0:x}",a);//得到的字串是"1e240"stringstr2=a.ToString("x5");//得到的字串是"1e240"stringstr3=a.ToString("x6");//得到的字串是"01e240"stringstr4=a.ToString("x7");//得到的字串是"001e240"保持精度(来回转换)

将数字从一种格式转换为另一种格式时,可能会降低精度。字符“R或r”用于将字符串转换为数字是保持其精度。使用该格式说明符后,运行时环境将尽可能保持原有数字的精度。第22页/共51页5.2.2格式化说明符2.自定义数字格式说明符有时候,需要更精确地按某种意图控制数字的格式,比如格式化驾驶证号或社会保险号时,可能想加入短划线;而对于电话号码,则想加入括号和短划线等,这时就需要使用一些自定义的格式说明符来实现所需的数据格式。表5.2所示为自定义数据格式说明符。第23页/共51页5.2.2格式化说明符格式说明符描述0零占位符,如果可能,则填充位#数字占位符,如果可能,则填充位.在数字中显示小数点,在数字中用作千位分隔符。也可用作数字比例换算,例如,格式字符串“0,,”将100,000,000简单表示为100。使用“,”字符指示比例换算在格式化数字中不包括千位分隔符。因此,若要将数字缩小1,000,000倍并插入千位分隔符,应使用格式字符串“#,##0,,”%将数字显示为百分比值(如:1.00被显示为100%)E+0,E-0,e+0,e-0科学计数法形式,数字0的个数表示10的指数用几位数字表示\显示特殊字符。如可以是转义字符之一‘xyz’显示单引号内的文本“xyz”显示双引号内的文本;“;”用来分隔格式字符串中的正数、负数和零各部分表5.2自定义数据格式说明符

第24页/共51页5.2.2格式化说明符【例5.5】使用自定义说明符显示特殊数据格式(用WriteLine()方法实现输出)。usingSystem;usingSystem.Globalization;classCustomFormat1{publicstaticvoidMain(){inta=1234;floatb=12.34f;//"0"格式化说明符

Console.WriteLine("\n"0"格式化说明符:");Console.WriteLine("{0}{0:0000000}",a);Console.WriteLine("{0}{0:0000000}",b);//"#"格式化说明符

Console.WriteLine("\n"#"格式化说明符:");Console.WriteLine("{0}{0:0####}",a);Console.WriteLine("{0}{0:0####}",b);//","格式化说明符

Console.WriteLine("\n","格式化说明符:");Console.WriteLine("{0}{0:0,,}",1000000);//","用作倍增器

Console.WriteLine("{0}{0:##,###,##0}",2000000);//","用作分隔符

Console.WriteLine("{0}{0:##,###,##0}",3);//"%"格式化说明符

Console.WriteLine("\n"%"格式化说明符:");Console.WriteLine("{0}{0:0%}",a);//将原数乘100%Console.WriteLine("{0}{0:0%}",b);//单引号''格式化说明符

Console.WriteLine("\n单引号格式化说明符:");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);}}第25页/共51页5.2.2格式化说明符程序的执行结果:"0"格式化说明符:1234000123412.340000012"#"格式化说明符:12340123412.3400012","格式化说明符:1000000120000002,000,00033"%"格式化说明符:1234123400%12.341234%单引号格式化说明符:1234mynumberis:123412.34mynumberis:121234mine:123412.34mine:12第26页/共51页5.2.2格式化说明符【例5.6】使用for循环创建一个负数,然后将其递增为0和正数。并且可以使用同一个WriteLine来显示它们。本例将给出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:正数:0;负数:-0;零:0}",x);}Console.WriteLine("\n第三种情况");

for(intx=-100;x<=100;x+=100){Console.WriteLine("{0:father:-0;mother:0;brother:0}",x);}}}第27页/共51页5.2.2格式化说明符程序运行结果:第一种情况-001000100第二种情况负数:-100零:0正数:100第三种情况mother:100brother:0father:-100第28页/共51页5.2.2格式化说明符3.格式化日期和时间获取日期和时间

C#和.NET框架提供了一个用于存储日期和时间的类System.DateTime,我们可通过DateTime类获取完整的日期和时间。DateTime类常用的3种使用格式:DateTime(intyear,intmonth,intday);DateTime(intyear,intmonth,intday,inthour,intminute,intsecond);DateTime(intyear,intmonth,intday,inthour,intminute,intsecond,intmillisecond);我们只要按要求给出所要表示的日期和时间的整数数值就可以构造出DateTime类的对象。例如,建立一个对象表示2002年10月1日上午8点30分15秒,可以用以下语句实现:DateTimemydate=newDateTime(2002,10,1,8,30,15);//生成一个DateTime类的对象DateTime类包含许多很有用的属性和方法,用于表示当前日期和时间等信息,DateTime类的属性如表5.3所示。第29页/共51页5.2.2格式化说明符属性名描述New静态(static)属性,返回当前的时间Today静态(static)属性,返回当前的日期Date返回DateTime对象的日期部分DayOfYear返回DateTime对象中日期属于该年份的多少天,1~365(闰年为366)之间Year返回DateTime对象的年份部分Month返回DateTime对象的月份部分Day返回DateTime对象的日期值,1~31之间DayOfWeek返回DateTime对象的星期部分(即星期几),1~7之间TimeOfDay返回DateTime对象的时间部分Hour返回DateTime对象的小时部分Minute返回DateTime对象的分钟部分Second返回DateTime对象的秒部分表5.3DateTime类的属性

第30页/共51页5.2.2格式化说明符属性名描述Millisecond返回DateTime对象的毫秒部分Ticks返回DateTime对象对应的100纳秒数续表第31页/共51页5.2.2格式化说明符以上属性都是静态属性,因此可以直接通过类名来取得它们的值,不需要通过对象来调用,例如:DateTime.NowDateTime.Today【例5.7】获取日期和时间。usingSystem;usingSystem.Globalization;classDateTime1{publicstaticvoidMain(){DateTimedate=newDateTime(2002,10,1);//构造一个DateTime对象2002年10月1日Console.WriteLine(date);Console.WriteLine(date.DayOfWeek);//对象的星期数Console.WriteLine(date.DayOfYear);//对象的日期在一年中的序号Console.WriteLine(date.TimeOfDay);//对象的时间Console.WriteLine(DateTime.Now);//调用DateTime的静态属性,获取程序运行的当前时间}}运行结果:2002-10-100:00:00 //在创建DateTime对象时,由于没有指定时间数值,所以时间数值为0Tuesday //星期二274 //2002年的第274天00:00:002003-4--121:53:12第32页/共51页5.2.2格式化说明符格式化日期和时间数据

在日常生活中,我们表示时间和日期的形式有多种。例如2002年10月1日16:00是一种表达方式,而这一日期和时间也可表示为:10/1/20024:00PM,除了这两种形式外,还有多种表达方式。如何让程序在输出时能显示我们想要的日期和时间格式呢?

在DateTime类中封装了Write()方法,可以用来进行日期时间的格式化操作。日期和时间数据的格式化说明符如表5.4所示。第33页/共51页5.2.2格式化说明符格式化说明符描述默认格式输出范例(中文版)d短日期mm/dd/yyyy2002-9-23D长日期day,monthdd,yyyy2002年9月23日格式化说明符描述默认格式输出范例(中文版)f长日期短时间day,monthdd,yyyyhh:mmAM/PM2002年9月23日16:00F长日期长时间day,monthdd,yyyyhh:mm:ssAM/PM2002年9月23日16:00:00g短日期短时间mm/dd/yyyyhh:mm2002-9-2316:00G短日期长时间mm/dd/yyyyhh:mm:ss2002-9-2316:00:00M或m月份和天monthdd9月23日R或rRFC1123国际标准格式ddd,ddmonthyyyyhh:mm:ssGMTMon,23Sep200216:00:00GMTsISO8601标准格式yyyy-mm-ddhh:mm:ss2002-09-23T16:12:23t短时间hh:mmAM/PM12:30PMT长时间hh:mm:ssAM/PM12:30:54PMu格林尼治时间yyyy-mm-ddhh:mm:ss2002-09-2312:30:54ZU格林尼治时间day,monthdd,yyyyhh:mm:ssAM/PM2002-09-234:30:54PMY或y年份和月份Month,yyyy2002年9月表5.4日期和时间格式化说明符

注:表5.4中,d表示日期;m表示月份;y表示年份;h表示小时;m表示分钟;s表示秒;GMT表示国际标准时间。

第34页/共51页5.2.2格式化说明符【例5.8】日期时间格式。usingSystem;usingSystem.Globalization;classDateTime2{publicstaticvoidMain(){//使用Format方法DateTimemydate1=newDateTime(2001,10,1,16,0,0);//构建对象//使用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);//错误!Console.WriteLine("u:{0:u}",mydate2);Console.WriteLine("d:{0:y}",mydate2);Console.WriteLine("Y:{0:Y}",mydate2);}}读者可以上机运行该程序,并将结果与表5.4的内容进行比较,以便深刻理解和领会日期时间数据的格式。第35页/共51页5.3处理字符串的方法5.3.1String类的字符串方法

5.3.2StringBuilder类的字符串方法

5.3.3Parse()方法

5.3.4Convert类第36页/共51页5.3处理字符串的方法前面已介绍了关于格式化字符串的所有知识,由于字符串是一种特殊的数据类型,所以介绍有关方面深入的应用问题。第37页/共51页5.3.1String类的字符串方法

字符串变量是由关键字string来定义的,而String是System命名空间中的一个类,所以对字符串进行操作可以调用String类的所有属性和方法。String类的方法调用格式为:String.方法名()表5.5列出了一些String类常用的处理字符串的方法。有关表中方法的参数和String类的其他方法可参见MSDN文档。

第38页/共51页5.3.1String类的字符串方法

方法描述静态方法Compare(字串1,字串2)比较两个指定的String对象(字串)的值CompareOrdlinal比较两个字串的值,但不考虑区域性语言或其他国际化问题Concat连接String的一个或多个实例,或Object的一个或多个实例的值的String表示形式Copy创建一个与指定的String具有相同值的String的新实例Equals比较两个字串,以确定它们是否包含相同的值。如果是,返回true;否则返回falseForamt将指定String的每个格式说明符替换为相应对象的值的文本等效项每个实例都有的方法和属性Chars获取此实例中位于指定字符位置的字符。在C#中,该属性为String类的索引器。Clone返回对String类实例的引用CompareTo将当前字串同另一个字串进行比较。如果当前字串更小,返回一个负数;如相等,返回0;如更大,返回一个正数CopyTo将指定数目的字符从此实例中的指定位置复制到Unicode字符数组中的指定位置Equals比较两个字串,以确定它们是否包含相同的值。如果是则返回true,否则返回false表5.5String类常用的字符串方法

第39页/共51页5.3.1String类的字符串方法

方法描述IndexOf返回字串中第一次出现某个字符或字串索引(位置),如没有这样的字符或字串,则返回-1。Insert在实例中的指定索引位置插入一个指定的String类的实例。LastIndexOf返回字串中最后一次出现某个字符或字串的索引(位置),如没有这样的字符或字串,则返回-1。Length返回字串的长度,长度等于字串包含的字符数。PadLeft将字串右对齐,并在左边填充指定的字符(或空格)。PadRight将字串左对齐,并在右边填充指定的字符(或空格)。Remove从字串的指定位置开始删除指定数目的字符。续表第40页/共51页5.3.2StringBuilder类的字符串方法

当我们调用字符串方法进行字符串的修改时,实际上将创建一个新的字符串,而存储在字符串中的某个字符是不能修改的。例如:以下代码运行后字符串中的字符不能被修改。usingSystem;classStringError{publicstaticvoidMain(){stringstr="abcdefghijklmnop";//字符串虽是由字符数组组成,但不能将其中第6个字符改为X,!str[5]='X';//程序运行会出错Console.WriteLine(str);}}程序运行后原字符串没有被修改,并且系统不正常退出。在实际应用中,使用表5.5中列出的处理字符串的方法时,需要为处理后的新字符串另设一个空的存储空间(即创建一个新的字符串对象)。例如,在本例中需要先将前5个字符复制到另一个存储空间,然后输入第6个字符,最后将从第7个字符开始的字符串复制到后面。如果确实需要修改字符串,则应该使用C#提供的StringBuilder类。命名空间System.Text中的StringBuilder类用于创建存储可修改字符串的对象。使用StringBuilder类创建的对象与用String类创建的字符串类似,差别在于后者创建的字符串不能被修改,当要修改或操纵字符串时,必须再另创建一个新的字符串对象。而StringBuilder类的对象包含的字符串信息可以被修改,该类的方法也可直接操纵字符串中存储的值。表5.6列出了StringBuilder类的方法和属性。第41页/共51页5.3.2StringBuilder类的字符串方法

方法或属性描述Append(字符串)在StringBuilder类实例的结尾追加指定对象的字符串方法或属性描述AppendFormat向StringBuilder类实例中追加包含零个或更多格式规范的格式化字符串Capacity属性获取或设置可包含在当前StringBuilder类实例所分配的内存中的最大字符数Chars属性获取或设置StringBuilder类实例中指定字符位置处的字符EnsureCapacity确保StringBuilder的容量至少是指定的值Equals返回一个值,该值指示StringBuilder类实例是否与指定对象相等Insert将指定对象的字符串表示形式插入到StringBuilder类实例中的指定字符位置Length设置或取得当前存储在StringBuilder类对象的长度值MaxCapacity取得StringBuilder类实例的最大容量Remove从当前实例的指定位置开始,删除指定数目的字符Replace将实例中所有指定的字符或字符串替换为其他的指定的字符或字符串ToString将StringBuilder转换为String的字符串表5.6StringBuilder类的方法和属性

第42页/共51页5.3.2StringBuilder类的字符串方法

有关表5.6中方法的参数和StringBuilder类的其他方法可参见MSDN文档。【例5.9】使用StringBuilder类。usingSystem;usingSystem.Text;//为了引用StringBuilder类classBuildName{publicstaticvoidMain(){StringBuilderchgstr=newStringBuilder();//创建名为chgstr的StringBuilder对象stringbuffer;//创建名为buffer的字符串用于取得用户输入的信息intmarker=0;Console.Write("请输入您的姓:");//读取"姓"buffer=Console.ReadLine();if(buffer!=null){chgstr.Append(buffer);//将姓追加到StringBuilder类的对象chgstr中marker=chgstr.Length;//将姓的长度赋给变量marker,该变量被用来确定放置"中名"的位置}第43页/共51页5.3.2StringBuilder类的字符串方法

Console.Write("请输入您的姓名的最后一个字:");//读"名"buffer=Console.ReadLine();if(buffer!=null){chgstr.Append("");//加一个空格chgstr.Append(buffer);//将buffer中字符串追加到chgstr中}Console.Write("请输入您的中名:");//读"中名"buffer=Console.ReadLine();if(buffer!=null){chgstr.Insert(marker+1,buffer);//将中名插入chgstr对象的中间chgstr.Insert(marker+buffer.Length+1,"");//在"中名"后插入空格}Console.WriteLine("您的全名是:{0}",chgstr);//显示全名Console.WriteLine("您的全名长度:{0}",chgstr.Length);//输出chgstr对象当前存储的值的长度}}程序的输出结果:请输入您的姓:刘(回车)请输入您的姓名的最后一个字:南(回车)请输入您的中名:泳您的全名是:刘泳南您的全名长度:5第44页/共51页5.3.3Parse()方法

上节介绍的Format方法和ToString方法,都是用来将数字转换为相应格式的字符串输出。而与这些方法相对应的Parse()方法则可以将字符串转换为数值类型数据,且被转换的字串可以包含格式化数据,也可以是由数字字符组成的字串。调用Parse()方法的常用格式:publicstatic数据类型.Parse(strings);【例5.10】数字和字串的相互转换。usingSystem;usingSystem.Globalization;classEachother{publicstaticvoidMain(){inta;doubled;stringstr;str=Console.ReadLine();//控制台输入整数数字字串a=int.P

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论