C#编程及应用程序开发(第2版)电子课件第五章

上传人:pia****nwu 文档编号:244812474 上传时间:2024-10-06 格式:PPT 页数:52 大小:342KB
返回 下载 相关 举报
C#编程及应用程序开发(第2版)电子课件第五章_第1页
第1页 / 共52页
C#编程及应用程序开发(第2版)电子课件第五章_第2页
第2页 / 共52页
C#编程及应用程序开发(第2版)电子课件第五章_第3页
第3页 / 共52页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第5章 数据的输入和输出,(时间:1.5次课,3学时),第5章 数据的输入和输出,输入/输出是程序得以实际应用的必要措施,在程序中实现数据的输入和输出也是每个程序员必须掌握的基本编程技术。在前面各章节的举例中,我们都已经使用了C#语言的部分输入/输出系统,其中用得最多的是.NET类库中Console类的一个方法Console. WriteLine(),这个方法是将在程序中生成的数据或信息输出到控制台(Console)中。另外,程序不光是要向控制台输出数据,还要从控制台读取输入的数据,或者要求输出的数据具有一定的格式。一般说来,数据的输入/输出(I/O)方式有两种:控制台I/O和文件I/O。C#的I/O系统非常庞大,也有控制台I/O和文件I/O两大部分,本章只介绍控制台I/O部分,而文件I/O部分将在后续章节详细介绍。,C#的控制台I/O主要是通过命名空间System中的类Console来实现的,该类给出了标准的输入和输出的方法,这些方法可用于从控制台读写字符。,本章介绍的内容不是任何C#语法,而是.NET框架中常用的控制台输入/输出的类和方法的使用格式。,本章学习重点:,掌握在控制台中输入/输出数据的方法,掌握输出格式化数据的方法,掌握处理字符串的方法,第5章 数据的输入和输出,5.1 控制台输入,5.2 控制台输出,5.3 处理字符串的方法,5.1 控制台输入,5.1.1,Console.Read,(),方法,5.1.2,Console.ReadLine,(),方法,5.1 控制台输入,System.Console类的Read()和ReadLine()方法可用来实现控制台输入,本节我们将详细介绍如何使用这两种方法获取输入。,5.1.1 Console.Read()方法,Read()方法每次从输入流(控制台)中读取一个字符,直到收到Enter键才返回。将接收的字符以int型(32位整数)值返回给变量;如果输入流中没有数据,则返回-1。,Read()方法是一个静态方法,我们可以直接通过类名Console调用它,调用的格式为Console.Read。Read()方法的原型为:public static int Read()。,如果我们输入了多个字符,然后按Enter键(此时输入流中将包含用户输入的字符,加上Enter键和换行符rn),则Read()方法只返回用户输入的第一个字符。但我们可通过对程序的循环控制,多次调用Read()方法来获取所有输入的字符。,Read()方法返回给变量的数据的类型是32位整数,如果需要得到输入的字符,则必须通过数据类型显式转换才可以得到相应的字符。,5.1.1 Console.Read()方法,【例5.1】Read()方法的使用。,using System;,class MyRead1,public static void Main(),int a;,char ch;,Console.Write(请从键盘输入一个字符:);,a=Console.Read(); /程序运行到Read方法会暂停,直到用户在控制台中按任意键,ch=(char)a; /显式类型转换,Console.WriteLine(a);,Console.WriteLine(ch);,程序运行结果:,请从键盘输入一个字符:a (回车),97,a,5.1.1 Console.Read()方法,【例5.2】通过Read()方法从控制台接收用户输入的一系列字符,然后把用户输入的内容显示出来。,using System;,class MyRead2,public static void Main(string args),string buf ;,Console.Write(请输入字符串(按Enter键接收输入,按x键退出程序):);,buf=;,while(true),int c= Console.Read(); /接收一个字符,if(char)c= =x /按下x或X键,退出本程序,if (c= =-1)Console.WriteLine(不输入);,buf+=(char)c; /将字符组成字符串,if(c= =n)break;,Console.Write(用户输入的内容为:);,Console.WriteLine(0, buf);,在本程序中,可以一次输入单个字符,也可以一次输入多个字符。当按下x或X键再按下Enter键后将会退出本程序。,5.1.2 Console.ReadLine()方法,ReadLine()方法用于从控制台中一次读取一行字符串,直到遇到Enter键才返回读取的字符串。但此字符串中不包含Enter键和换行符(rn)。如果没有收到任何输入,或接收了无效的输入,那么ReadLine()方法将返回null。,ReadLine()方法也是一个静态方法,可以直接通过类名Console来调用它,调用的格式为Console.ReadLine。,ReadLine()方法的原型为:public static string ReadLine(),5.1.2 Console.ReadLine()方法,【例5.3】使用ReadLine()方法。,using System;,class MyReadline,public static void Main(),int i;,string str;,Console.Write(请输入你的姓名:);,str= Console.ReadLine();,Console.Write(用户的姓名为:);,Console.WriteLine(str);,程序的运行结果:,请输入你的姓名:王红 (回车),用户的姓名为:王红,5.2 控制台输出,5.2.1,数据的格式化,5.2.2,格式化说明符,5.2 控制台输出,在前述的各章节中,我们同样也多次使用了Console类的Write()和WriteLine()方法来输出程序的计算结果。日常生活中,有时我们不仅仅要求程序简单地输出数据,还要求能输出具有一定格式的数据,以丰富我们应用程序的应用需求。,5.2.1 数据的格式化,在日常生活中,各行各业的数据表示形式有多种。例如,一个十进制数字965840,可能有以下表示形式:,表示人民币:¥9,658.40,表示美元:9,658.40,用于科学计算:9.65840105,在C#中表示为9.65840E5,可见,对于一个程序来说,它的计算结果只是一个无任何语义的数字。所以如果希望一个应用程序的计算结果在输出时能反映出它的应用特征,则必须在程序的输出语句中给出所需数据格式的转换控制。C#语言具有将数字在不同的表示形式之间相互转换的功能 数据的格式化。,数据的格式化是指通过程序(方法),将数据的表现形式转换为一定样式的过程。C#语言是通过.NET类库方法、格式化字符串以及其他的控制信息共同完成的。,5.2.1 数据的格式化,一般实现把数字转换为指定格式的字符串输出的基本方式有3种:,Write()和WriteLine()方法可以直接把数值类型变量的值,转换成字符串输出到控制台中,并可使用格式说明符来控制输出的数据格式。,Write()方法用来向控制台输出一条信息,并且光标仍在输出信息的末尾。一般Write()方法中有以下两种常用的形式:,public static void Write(数值数据类型 变量); /直接输出变量的值,public static void Write(N, M:Yn, 变量1, 变量2);,其中:N表示输出变量的序号。N为0对应输出的第1个变量,N为1则对应输出的第2个变量,依次类推。, M可选项。M表示输出的变量在控制台中所占据的字符个数,如果该数字为负数,则输出按照左对齐方式;如果该数字为正数,则输出按照右对齐的方式。:Yn可选项。其中Y是格式化字符串,它指的是数据的输出格式说明符,将在5.2.2节中给出。n为一个正整数。表示了数据的精度范围(有效数字范围),它用于控制当前数据在格式化后表现出来的有效数字个数。,例如:,int a=32767;,double d=456.56789;,Console.Write(a=0x0, 8:Xt d=1, 10:F3, a, d);,Console.Write(a=0x0, -8:Xt d=1, -10:F3, a, d);,输出结果:,a=0x 7fff d= 456.568a=0x7fff d=456.568,本例中的格式说明符X和F在5.2.2节中给出说明。,5.2.1 数据的格式化,WriteLine,(),方法用来向控制台产生一行信息,并在信息的尾部自动添加“,rn,”,操作符,即输出信息后光标自动移到下一新行。同,Write(),方法类似,,WriteLine,方法有以下两种常用的形式:,public static void,WriteLine,(,数值数据类型 变量,);,public static void,WriteLine(N, M:Y,变量,1,变量,2);,WriteLine,(),方法的参数与,Write(),方法的参数意义一样。,例如:,int,a=32767;,double d=456.56789;,Console.WriteLine(a,=0x0, 8:Xtd=1, 10:F3, a, d);,Console.WriteLine(a,=0x0, -8:Xtd=1, -10:F3, a, d);,输出结果:,a=0x 7fff d= 456.568,a=0x7fff d=456.568,可见此例输出结果与,Write(),方法不同的是每一个,WriteLine,(),方法输出一行信息后自动换行。,5.2.1 数据的格式化,调用,ToString,方法中使用格式说明符。,ToString,方法是,System.Object,类中的一个方法,此方法可以将变量的值转换为由数字、数学符号等组成的字符串。由于所有的类都是从,Object,类中派生出来的,因此,所有的对象都可以使用,ToString,方法,例如各种基本数据类型,(int32,、,int64),等。,ToString,方法的调用格式为:类对象名称,.,ToString,(“,格式说明符”,),例如:,int,var,=8769,;,string,str,=var.,ToString(C,);/,使用,ToString,(),方法,将整型数转换为金额格,式表示输出结果将是:¥,8,769.00,其中格式说明符,C,是用于金额的格式说明符,我们将在,节中介绍。,调用,String,类的,Format,静态方法。,Format(),方法可用于将信息格式化为一个新的字符串。由于,Format(),方法是静态的,因此可以以,String.Format,的方式直接调用。,Format,方法常用的使用格式:,string,str,=,String.Format(N,M:Yn,变量,1,变量,2, .);,其中:,str,是格式化后得到的字符串;其他的参数与,Write,和,WriteLine,方法中的参数相同。,Format(),方法还有两种使用格式可参阅,MSDN,文档。,5.2.1 数据的格式化,【例5.4】基本的格式化方法。,u sing System;,class MyFormat,public static void Main(),int a=34567;,Console.WriteLine(使用WriteLine格式化数据:);,Console.WriteLine(n0:Cn0:C4, a);,Console.Write Line(n0:Fn0:F4, a);,Console.WriteLine(使用ToString格式化数据:);,string str1=a.ToString(c);,string str2=a.ToString(c3);,Console.WriteLine (str1);,Console.WriteLine (str2);,Console.WriteLine(使用String.Format格式化数据:);,string str4=String.Format(我们也能使用String.Format格式化数据:);,string str5=String.Format(n0:cn0:c0, a);,Console.WriteLine(str4);,Console.WriteLine(str5);,5.2.1 数据的格式化,程序运行结果:,使用WriteLine格式化数据:,¥34,567.00,¥34,567.0000,34567.00,34567.0000,使用ToString格式化数据:,¥34,567.00,¥34,567.000,使用String.Format格式化数据:,¥34,567.00,我们也能使用String.Format格式化数据:,¥34,567,在本例中将变量a中的数字格式化为金额、小数,其中的说明符将在5.2.2节中详细 介绍。,5.2.2 格式化说明符,.NET框架体系规定可以使用两种格式进行数据的格式化:一种是由系统定义的标准格式,另一种是用户自定义格式。这两种格式主要包含了各种用于格式化数据的格式控制字符,使用这些控制字符组成所需的数据格式,然后由5.2.1节中所述3种格式化方式即可实现数据的格式化了。,1. 标准格式说明符,标准格式说明符定义了人们常用的8种数据表示形式,如表5.1所示。,5.2.2 格式化说明符,格式说明符,描 述,输出样式,输出范例,C或c,货币金额格式,xx,xxx.xx,(如果在中文操作系统中使用,货币符号为¥),12,345.67,D或d,整数数据格式,-xxxxxxx,-1234567,E或e,科学计数法格式,-x.xxxxE+xxx,-x.xxxxE,-,xxx,-1.234567E+123,-1.234567E-123,F或f,浮点数据格式,-xxxxxx.xx,-1234567.89,G或g,通用数据格式,随具体情况而定,将使用最紧凑的格式,N或n,自然数据格式,-xx,xxx.xx,-12,345.67,X或x,十六进制数据格式,返回数据的十六进制数据表示方式,12d654,R或r,来回转换,(roundtrip),将数字转换为字符串后,再转换为数字时,精度不变,表5.1 标准格式说明符,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位数字。,例如:,int a=123456;,double d=1234.5678;,string str1=String.Format(0:c,a); /得到的字串是¥123,456.00,string str2=String.Format(0:c, d); /得到的字串是¥1,234.57,string str3=String.Format(0:c4 , a); /得到的字串是,¥123,456.0000,string str4=String.Format(0:c4, d); /得到的字串是¥1,234.5678,string str5=d.ToString(c); /得到的字串是¥1,234.57,string str6=d.ToString(c4); /得到的字串是¥1,234.5678,5.2.2 格式化说明符,提示:,所显示的货币金额符号同用户使用的操作系统有关,如果本例在 Windows 2000 Professional英文版中运行,则结果中显示的 货币符号是;如果我们使用的是中文版操作系统,则将会显 示的货币符号可能就是¥。,5.2.2 格式化说明符,整数数据格式字符“,D,或,d”,用来组成将数据表示为十进制整数数据的格式化字符串。字符“,D,或,d”,后面的数字规定了要表示的数据位数,如果这个数字小于整数数据的位数,则显示所有的整数位;如果这个数字大于整数数据的位数,则在整数数据的前面用数字“,0”,补足所有的位数。,例如:,int,a=123456;,string str1=String.Format(0:d, a); /,得到的字串是,123456,string str2=String.Format(0:d6 , a); /,得到的字串是,123456,string str3= String.Format(0:d7, a); /,得到的字串是,0123456,string str4=,a.ToString(d,); /,得到的字串是,123456,string str5= a.ToString(d7); /,得到的字串是,0123456,科学计数法格式字符“,E,或,e”,用来将数据转换为科学计数法形式。在字符“,E,或,e”,后面的数字用来规定科学计数法表示数据的小数点后数字的个数。如字符“,E,或,e”,后面没有数字,则显示,7,位有效数字。,例如:,int,a=123456;,double d=1234.5678;,string str1=String.Format(0:e, a); /,得到的字串是,1.234560e+005,string str2=String.Format(0:e, d); /,得到的字串是,1.234568e+003,string str3=String.Format(0:e4,a); /,得到的字串是,1.2346e+005,string str4=String.Format(0e4, d); /,得到的字串是,1.2346e+003,string str5=,a.ToString(E,); /,得到的字串是,1.234560E+005,string str6=d.ToString(E4); /,得到的字串是, 1.2346E+003,浮点数据格式字符“,F,或,f”,用来描述带有小数点的数据的显示形式。字符“,F,或,f”,后面的数字规定了小数点后的数据位数。如果没有指定数字,则数据默认保留两位小数,如果指定的数字大于数据本身小数部分的位数,则在小数部分数字的最后补“,0”,。,5.2.2 格式化说明符,自然数据格式字符“,N,或,n”,用来表示自然数据格式。这种数据格式将数据格式化成带逗号和小数点,即表示为“,dd,ddd,ddd.dd,”,的形式。这种数字分组的表示形式多用于一些正规的场合,便于直观了解数据的大小量级。字符“,N,或,n”,后面的数字规定了数据格式中小数点后面的数字个数。,int,a=123456;,double d=1234.5678;,string str1=String.Format(0:n,a); /,得到的字串是,123,456.00,string str2=String.Format(0:n, d); /,得到的字串是,1,234.57,string str3=a.ToString(n4); /,得到的字串是,123,456.0000,string str4=d.ToString(n4); /,得到的字串是,1,234.5678,十六进制数据格式字符“,X,或,x”,用于将数据表示为十六进制格式。字符“,X,或,x”,后面的数字表示了格式化数据的数字个数,其规定与整数数据格式类似。,例如:,int,a=123456;,string str1=String.Format(0:,x,a,); /,得到的字串是,1e240,string str2=,a.ToString,(x5); /,得到的字串是,1e240,string str3=,a.ToString,(x6 ); /,得到的字串是,01e240,string str4=,a.ToString,(x7); /,得到的字串是,001e240,保持精度,(,来回转换,),将数字从一种格式转换为另一种格式时,可能会降低精度。字符“,R,或,r”,用于将字符串转换为数字是保持其精度。使用该格式说明符后,运行时环境将尽可能保持原有数字的精度。,5.2.2 格式化说明符,2. 自定义数字格式说明符,有时候,需要更精确地按某种意图控制数字的格式,比如格式化驾驶证号或社会保险号时,可能想加入短划线;而对于电话号码,则想加入括号和短划线等,这时就需要使用一些自定义的格式说明符来实现所需的数据格式。表5.2所示为自定义数据格式说明符。,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 自定义数据格式说明符,5.2.2 格式化说明符,【例5.5】使用自定义说明符显示特殊数据格式(用WriteLine()方法实现输出)。,using System;,using System.Globalization;,class CustomFormat1,public static void Main(),int a=1234;,float b=12.34f;,/ 0格式化说明符,Console.WriteLine(n0格式化说明符:);,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:my number is: 0, a);,Console.WriteLine (0,0: my number is: 0, b);,Console.WriteLine (0,0: mine: 0, a);,Console.WriteLine (0,0:mine:0, b);,5.2.2 格式化说明符,程序的执行结果:,0格式化说明符:,1234,0001234,12.34,0000012,#格式化说明符:,1234,01234,12.34,00012,格式化说明符:,1000000,1,2000000,2,000,000,3,3,%格式化说明符:,1234,123400%,12.34,1234%,单引号格式化说明符:,1234,my number is: 1234,12.34,my number is: 12,1234,mine:1234,12.34,mine:12,5.2.2 格式化说明符,【例5.6】使用for循环创建一个负数,然后将其递增为0和正数。并且可以使用同一个WriteLine来显示它们。本例将给出3种不同的情况。,using System;,class CustomFormat2,public static void Main(),Console.WriteLine(n第一种情况);,for( int x=-100; x=100; x+=100),Console.WriteLine(0:000; -00000; 0, x);,Console.WriteLine(n第二种情况);,for( int x=-100; x=100; x+=100),Console.WriteLine(0:正数:0; 负数:-0; 零:0, x);,Console.WriteLine(n第三种情况);,for( int x=-100; x=100; x+=100),Console.WriteLine(0:father:-0; mother :0; brother:0 , x);,5.2.2 格式化说明符,程序运行结果:,第一种情况,-00100,0,100,第二种情况,负数:-100,零:0,正数:100,第三种情况,mother:100,brother:0,father:-100,5.2.2 格式化说明符,3. 格式化日期和时间,获取日期和时间C#和.NET框架提供了一个用于存储日期和时间的类System.DateTime,我们可通过DateTime类获取完整的日期和时间。,DateTime类常用的3种使用格式:,DateTime(int year, int month, int day);,DateTime(int year, int month, int day, int hour, int minute, int second);,DateTime(int year, int month, int day, int hour, int minute, int second, int millisecond);,我们只要按要求给出所要表示的日期和时间的整数数值就可以构造出DateTime类的对象。,例如,建立一个对象表示2002年10月1日上午8点30分15秒,可以用以下语句实现:,DateTime mydate=new DateTime (2002,10,1,8,30,15); /生成一个DateTime类的,对象,DateTime类包含许多很有用的属性和方法,用于表示当前日期和时间等信息,DateTime类的属性如表5.3所示。,5.2.2 格式化说明符,属 性 名,描 述,New,静态(static)属性,返回当前的时间,Today,静态(static)属性,返回当前的日期,Date,返回DateTime对象的日期部分,DayOfYear,返回DateTime对象中日期属于该年份的多少天,1365(闰年为366)之间,Year,返回DateTime对象的年份部分,Month,返回DateTime对象的月份部分,Day,返回DateTime对象的日期值,131之间,DayOfWeek,返回DateTime对象的星期部分(即星期几),17之间,TimeOfDay,返回DateTime对象的时间部分,Hour,返回DateTime对象的小时部分,Minute,返回DateTime对象的分钟部分,Second,返回DateTime对象的秒部分,表5.3 DateTime类的属性,5.2.2 格式化说明符,属性名,描 述,Millisecond,返回DateTime对象的毫秒部分,Ticks,返回DateTime对象对应的100纳秒数,续表,5.2.2 格式化说明符,以上属性都是静态属性,因此可以直接通过类名来取得它们的值,不需要通过对象来调用,例如:,DateTime.Now,DateTime.Today,【例5.7】获取日期和时间。,using System;,using System.Globalization;,class DateTime1,public static void Main(),DateTime date=new DateTime(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-1 00:00:00/在创建DateTime对象时,由于没有指定时间数值,所以时间数,值为0,Tuesday /星期二,274 /2002年的第274天,00:00:00,2003-4-1 21:53:12,5.2.2 格式化说明符,格式化日期和时间数据在日常生活中,我们表示时间和日期的形式有多种。例如,2002,年,10,月,1,日,16:00,是一种表达方式,而这一日期和时间也可表示为:,10/1/2002 4:00PM,,除了这两种形式外,还有多种表达方式。如何让程序在输出时能显示我们想要的日期和时间格式呢?在,DateTime,类中封装了,Write(),方法,可以用来进行日期时间的格式化操作。日期和时间数据的格式化说明符如表,5.4,所示。,5.2.2 格式化说明符,格式化说明符,描 述,默认格式,输出范例(中文版),d,短日期,mm/dd/yyyy,2002-9-23,D,长日期,day ,month dd, yyyy,2002年9月23日,格式化说明符,描 述,默认格式,输出范例(中文版),f,长日期短时间,day, month dd, yyyy,hh:mm AM/PM,2002年9月23日 16:00,F,长日期长时间,day, month dd, yyyy,hh:mm:ss AM/PM,2002年9月23日 16:00:00,g,短日期短时间,mm/dd/yyyy hh:mm,2002-9-23 16:00,G,短日期长时间,mm/dd/yyyy hh:mm:ss,2002-9-23 16:00:00,M或m,月份和天,month dd,9月23日,R或r,RFC1123国际标准格式,ddd,dd month yyyy,hh:mm:ss GMT,Mon,23 Sep 2002 16:00:00 GMT,s,ISO8601标准格式,yyyy-mm-dd hh:mm:ss,2002-09-23 T16:12:23,t,短时间,hh:mm AM/PM,12:30 PM,T,长时间,hh:mm:ss AM/PM,12:30:54 PM,u,格林尼治时间,yyyy-mm-dd hh:mm:ss,2002-09-23 12:30:54Z,U,格林尼治时间,day, month dd, yyyy,hh:mm:ss AM/PM,2002-09-23 4:30:54PM,Y 或y,年份和月份,Month,yyyy,2002年9月,表5.4 日期和时间格式化说明符,注: 表5.4中,d表示日期;m表示月份;y表示年份;h表示小时;m表示分钟;s表示秒;GMT表示国际标准时间。,5.2.2 格式化说明符,【例5.8】日期时间格式。,using System;,using System.Globalization;,class DateTime2,public static void Main(),/使用Format方法,DateTime mydate1=new DateTime (2001,10,1,16,0,0); /构建对象,/使用Write()方法,DateTime mydate2= 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的内容进行比较,以便深刻理解和领会日期时间数据的格式。,5.3 处理字符串的方法,5.3.1 String,类的字符串方法,5.3.2,StringBuilder,类的字符串方法,5.3.3 Parse( ),方法,5.3.4 Convert,类,5.3 处理字符串的方法,前面已介绍了关于格式化字符串的所有知识,由于字符串是一种特殊的数据类型,所以介绍有关方面深入的应用问题。,5.3.1 String类的字符串方法,字符串变量是由关键字string来定义的,而String是System命名空间中的一个类,所以对字符串进行操作可以调用String类的所有属性和方法。,String类的方法调用格式为:String.方法名(),表5.5列出了一些String类常用的处理字符串的方法。有关表中方法的参数和String类的其他方法可参见MSDN文档。,5.3.1 String类的字符串方法,方 法,描 述,静态方法,Compare(字串1,,字串2),比较两个指定的String对象(字串)的值,CompareOrdlinal,比较两个字串的值,但不考虑区域性语言或其他国际化问题,Concat,连接String的一个或多个实例,或Object的一个或多个实例的值的String 表示形式,Copy,创建一个与指定的String具有相同值的String的新实例,Equals,比较两个字串,以确定它们是否包含相同的值。如果是,返回true;否则返回false,Foramt,将指定String的每个格式说明符替换为相应对象的值的文本等效项,每个实例都有的方法和属性,Chars,获取此实例中位于指定字符位置的字符。在C#中,该属性为String类的索引器。,Clone,返回对String类实例的引用,CompareTo,将当前字串同另一个字串进行比较。如果当前字串更小,返回一个负数;如相等,返回0;如更大,返回一个正数,CopyTo,将指定数目的字符从此实例中的指定位置复制到 Unicode 字符数组中的指定位置,Equals,比较两个字串,以确定它们是否包含相同的值。如果是则返回true,否则返回false,表5.5 String类常用的字符串方法,5.3.1 String类的字符串方法,方 法,描 述,IndexOf,返回字串中第一次出现某个字符或字串索引(位置),如没有这样的字符或字串,则返回,-,1。,Insert,在实例中的指定索引位置插入一个指定的String类的实例。,LastIndexOf,返回字串中最后一次出现某个字符或字串的索引(位置),如没有这样的字符或字串,则返回,-,1。,Length,返回字串的长度,长度等于字串包含的字符数。,PadLeft,将字串右对齐,并在左边填充指定的字符(或空格)。,PadRight,将字串左对齐,并在右边填充指定的字符(或空格)。,Remove,从字串的指定位置开始删除指定数目的字符。,续表,5.3.2 StringBuilder类的字符串方法,当我们调用字符串方法进行字符串的修改时,实际上将创建一个新的字符串,而存储在字符串中的某个字符是不能修改的。,例如:以下代码运行后字符串中的字符不能被修改。,using System;,class StringError,public static void Main(),string str=abcdefghijklmnop;,/字符串虽是由字符数组组成,但不能将其中第6个字符改为X,!,str5=X; /程序运行会出错,Console.WriteLine(str);,程序运行后原字符串没有被修改,并且系统不正常退出。在实际应用中,使用表5.5中列出的处理字符串的方法时,需要为处理后的新字符串另设一个空的存储空间(即创建一个新的字符串对象)。例如,在本例中需要先将前5个字符复制到另一个存储空间,然后输入第6个字符,最后将从第7个字符开始的字符串复制到后面。,如果确实需要修改字符串,则应该使用C#提供的StringBuilder类。命名空间System.Text中的StringBuilder类用于创建存储可修改字符串的对象。使用StringBuilder类创建的对象与用String类创建的字符串类似,差别在于后者创建的字符串不能被修改,当要修改或操纵字符串时,必须再另创建一个新的字符串对象。而StringBuilder类的对象包含的字符串信息可以被修改,该类的方法也可直接操纵字符串中存储的值。表5.6列出了StringBuilder类的方法和属性。,5.3.2 StringBuilder类的字符串方法,方法或属性,描 述,Append(字符串),在StringBuilder类实例的结尾追加指定对象的字符串,方法或属性,描 述,AppendFormat,向StringBuilder类实例中追加包含零个或更多格式规范的格式化字符串,Capacity属性,获取或设置可包含在当前StringBuilder类实例所分配的内存中的最大字符数,Chars属性,获取或设置StringBuilder类实例中指定字符位置处的字符,EnsureCapacity,确保StringBuilder的容量至少是指定的值,Equals,返回一个值,该值指示StringBuilder类实例是否与指定对象相等,Insert,将指定对象的字符串表示形式插入到,StringBuilder,类实例中的指定字符位置,Length,设置或取得当前存储在StringBuilder类对象的长度值,MaxCapacity,取得StringBuilder类实例的最大容量,Remove,从当前实例的指定位置开始,删除指定数目的字符,Replace,将实例中所有指定的字符或字符串替换为其他的指定的字符或字符串,ToString,将StringBuilder转换为String的字符串,表5.6 StringBuilder类的方法和属性,5.3.2 StringBuilder类的字符串方法,有关表5.6中方法的参数和StringBuilder类的其他方法可参见MSDN文档。,【例5.9】使用StringBuilder类。,using System;,using System.Text; /为了引用StringBuilder类,class BuildName,public static void Main(),StringBuilder chgstr=new StringBuilder(); /创建名为chgstr的,StringBuilder对象,string buffer; /创建名为buffer的字符串用于取得用户输入的信息,int marker=0;,Console.Write(请输入您的姓:); /读取姓,buffer= Console.ReadLine();,if (buffer!=null),chgstr.Append(buffer); /将姓追加到StringBuilder类的对象chgstr中,marker= chgstr.Length; /将姓的长度赋给变量marker,该变量被用来确定放,置中名的位置,5.3.2 StringBuilder类的字符串方法,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,5.3.3 Parse( )方法,上节介绍的Format方法和ToString方法,都是用来将数字转换为相应格式的字符串输出。而与这些方法相对应的Parse()方法则可以将字符串转换为数值类型数据,且被转换的字串可以包含格式化数据,也可以是由数字字符组成的字串。,调用Parse()方法的常用格式:public static 数据类型.Parse(string s);,【例5.10】数字和字串的相互转换。,using System;,using System.Globalization;,class Eachother,public static void Main(),int a;,double d;,string str;,str=Console.ReadLine(); /控制台输入整数数字字串,a=int.Parse(str); /将字串转换为整数,Console.WriteLine(a+11111);,str=Console.ReadLine(); /控制台输入双精度数字字串,d=double.Parse(str); /将字串转换为双精度
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!