C# 数据的输入和输出_第1页
C# 数据的输入和输出_第2页
C# 数据的输入和输出_第3页
C# 数据的输入和输出_第4页
C# 数据的输入和输出_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

1、(时间:1.5次课,3学时) 第5章 数据的输入和输出 第5章 数据的输入和输出 输入/输出是程序得以实际应用的必要措施,在程序中实现数据的输入和输出也是每个程序员必须 掌握的基本编程技术。在前面各章节的举例中,我们都已经使用了c#语言的部分输入/输出系统, 其中用得最多的是.net类库中console类的一个方法console. writeline(),这个方法是将在程序 中生成的数据或信息输出到控制台(console)中。另外,程序不光是要向控制台输出数据,还要从 控制台读取输入的数据,或者要求输出的数据具有一定的格式。一般说来,数据的输入/输出(i/o) 方式有两种:控制台i/o和文件i

2、/o。c#的i/o系统非常庞大,也有控制台i/o和文件i/o两大部分, 本章只介绍控制台i/o部分,而文件i/o部分将在后续章节详细介绍。 c#的控制台i/o主要是通过命名空间system中的类console来实现的,该类给出了标准的输入和输 出的方法,这些方法可用于从控制台读写字符。 本章介绍的内容不是任何c#语法,而是.net框架中常用的控制台输入/输出的类和方法的使用格式。 本章学习重点: l掌握在控制台中输入/输出数据的方法 l掌握输出格式化数据的方法 l掌握处理字符串的方法 第5章 数据的输入和输出 5.1 控制台输入 5.2 控制台输出 5.3 处理字符串的方法 5.1 控制台输入

3、 u 5.1.1 console.read()方法 u 5.1.2 console.readline()方法 5.1 控制台输入 system.console类的read()和readline()方法可用 来实现控制台输入,本节我们将详细介绍如何使用 这两种方法获取输入。 5.1.1 console.read()方法 read()方法每次从输入流(控制台)中读取一个字符,直到收到 enter键才返回。将接收的字符以int型(32位整数)值返回给变量; 如果输入流中没有数据,则返回-1。 read()方法是一个静态方法,我们可以直接通过类名console调用 它,调用的格式为console.re

4、ad。read()方法的原型为:public static int read()。 如果我们输入了多个字符,然后按enter键(此时输入流中将包含 用户输入的字符,加上enter键和换行符rn),则read()方 法只返回用户输入的第一个字符。但我们可通过对程序的循环控 制,多次调用read()方法来获取所有输入的字符。 read()方法返回给变量的数据的类型是32位整数,如果需要得到 输入的字符,则必须通过数据类型显式转换才可以得到相应的字 符。 5.1.1 console.read()方法 【例5.1】read()方法的使用。 using system; class myread1 pub

5、lic 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; cla

6、ss 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.writelin

7、e(0, buf); 在本程序中,可以一次输入单个字符,也可以一次输入多个字符。当按下x或x键再按下enter键后将会退出本程序。 5.1.2 console.readline()方法 readline()方法用于从控制台中一次读取一行字符串,直到遇到 enter键才返回读取的字符串。但此字符串中不包含enter键和换 行符(rn)。如果没有收到任何输入,或接收了无效的输入, 那么readline()方法将返回null。 readline()方法也是一个静态方法,可以直接通过类名console来 调用它,调用的格式为console.readline。 readline()方法的原型为:publ

8、ic 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 控制台输出 u 5.

9、2.1 数据的格式化 u 5.2.2 格式化说明符 5.2 控制台输出 在前述的各章节中,我们同样也多次使用 了 console类的write()和writeline()方法来输出 程序的计算结果。日常生活中,有时我们不仅仅要 求程序简单地输出数据,还要求能输出具有一定格 式的数据,以丰富我们应用程序的应用需求。 5.2.1 数据的格式化 在日常生活中,各行各业的数据表示形式有多种。例如,一个十进制数字 965840,可能有以下表示形式: l表示人民币:¥9,658.40 l表示美元:9,658.40 l用于科学计算:9.65840105,在c#中表示为9.65840e5 可见,对于一个程序来

10、说,它的计算结果只是一个无任何语义的数字。所 以如果希望一个应用程序的计算结果在输出时能反映出它的应用特征,则 必须在程序的输出语句中给出所需数据格式的转换控制。c#语言具有将数 字在不同的表示形式之间相互转换的功能 数据的格式化。 数据的格式化是指通过程序(方法),将数据的表现形式转换为一定样式的 过程。c#语言是通过.net类库方法、格式化字符串以及其他的控制信息共 同完成的。 5.2.1 数据的格式化 一般实现把数字转换为指定格式的字符串输出的基本方式有3种: lwrite()和writeline()方法可以直接把数值类型变量的值,转换成字符串输出到控制台中,并可使用格式说明 符来控制输

11、出的数据格式。 uwrite()方法用来向控制台输出一条信息,并且光标仍在输出信息的末尾。一般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是格式化字符

12、串,它指的是数据的输出格式说明符,将在5.2.2节中给出。n为一个正 整数。表示了数据的精度范围(有效数字范围),它用于控制当前数据在格式化后表现出来的有效数字个数。 例如: int a=32767; double d=456.56789; console.write(a=0 x0, 8:xt d=1, 10:f3, a, d); console.write(a=0 x0, -8:xt d=1, -10:f3, a, d); 输出结果: a=0 x 7fff d= 456.568a=0 x7fff d=456.568 本例中的格式说明符x和f在5.2.2节中给出说明。 5.2.1 数据的格式化

13、 uwriteline()方法用来向控制台产生一行信息,并在信息的尾部自动添加“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=0 x0, 8:xtd=1, 10

14、:f3, a, d); console.writeline(a=0 x0, -8:xtd=1, -10:f3, a, d); 输出结果: a=0 x 7fff d= 456.568 a=0 x7fff d=456.568 可见此例输出结果与write()方法不同的是每一个writeline()方法输出一行信息后 自动换行。 5.2.1 数据的格式化 l调用tostring方法中使用格式说明符。 tostring方法是system.object类中的一个方法,此方法可以将变量的值转换为由 数字、数学符号等组成的字符串。由于所有的类都是从object类中派生出来的,因 此,所有的对象都可以使用to

15、string方法,例如各种基本数据类型(int32、 int64)等。 tostring方法的调用格式为:类对象名称.tostring(“格式说明符”) 例如: int var=8769; string str=var. tostring(c);/使用tostring()方法,将整型数转换为金 额格 式表示输出结果将是:¥8,769.00 其中格式说明符c是用于金额的格式说明符,我们将在5.2.2节中介绍。 调用string类的format静态方法。 format()方法可用于将信息格式化为一个新的字符串。由于format()方法是静态的, 因此可以以string.format的方式直接调用。

16、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

17、: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=s

18、tring.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.

19、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整数数据格式-xxxxx

20、xx-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 l其中: un表示输出变

21、量的序号。n为0对应输出的第1个变量,n为1则对应输出的第2个变量,依次类推。 u, m是可选项。m表示输出的变量在控制台中所占据的字符个数,如果该数字为负数,则输出按照左对齐方式; 如果该数字为正数,则输出按照右对齐的方式。 u:yn是可选项。y是格式化说明符,它指的是数据的输出格式说明符(如表5.1所示),这些字符是由系统定义 的,它们基本涵盖了.net框架定义的所有数值类型数据的表现形式。 un为一个正整数,表示了数据的精度范围(有效数字范围),它用于控制当前数据在格式化后表现出来的有效数 字个数。 l货币金额格式 字符“c或c”用来组成将数据转换为货币金额格式的字串,在字符“c或c”后

22、面的数字定义了货币金额数据小 数点后保留的数字个数,如果没有定义任何数字,则默认小数点后保留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,

23、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 格式化说明符 l整数数据格式 字符“d或d”用来组成将数据表示为十进制整数数据的格式化字符串。字符“d或d”后面的数字规定了要表示的

24、数据位数,如果这 个数字小于整数数据的位数,则显示所有的整数位;如果这个数字大于整数数据的位数,则在整数数据的前面用数字“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.

25、tostring(d7); /得到的字串是0123456 l科学计数法格式 字符“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

26、(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 l浮点数据格式 字符“f或f”用来描述带有小数点的数据的显示形式。字符“f或f”后面的数字规定了小数点后的数据位数。如果没有指定数字, 则数据默认保留两位小数,如果指定的数字大于数据本身小数部分的位数,则在小数部分数字的最后补“0”。 5.2

27、.2 格式化说明符 l自然数据格式 字符“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

28、.tostring(n4); /得到的字串是123,456.0000 string str4=d.tostring(n4); /得到的字串是1,234.5678 l十六进制数据格式 字符“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 ); /得到的字串

29、是01e240 string str4=a.tostring (x7); /得到的字串是001e240 l保持精度(来回转换) 将数字从一种格式转换为另一种格式时,可能会降低精度。字符“r或r”用于将字符串转换为数字是保持其精 度。使用该格式说明符后,运行时环境将尽可能保持原有数字的精度。 5.2.2 格式化说明符 2. 自定义数字格式说明符 有时候,需要更精确地按某种意图控制数字的格式,比 如格式化驾驶证号或社会保险号时,可能想加入短划线; 而对于电话号码,则想加入括号和短划线等,这时就需 要使用一些自定义的格式说明符来实现所需的数据格式。 表5.2所示为自定义数据格式说明符。 5.2.2

30、格式化说明符 格式说明符描 述 0零占位符,如果可能,则填充位 #数字占位符,如果可能,则填充位 .在数字中显示小数点 ,在数字中用作千位分隔符。也可用作数字比例换算,例如,格式字符串“0,”将 100,000,000 简单表示为100。使用“,”字符指示比例换算在格式化数字中不 包括千位分隔符。因此,若要将数字缩小 1,000,000 倍并插入千位分隔符, 应使用格式字符串“#,#0,” %将数字显示为百分比值(如:1.00被显示为100%) e+0, e-0, e+0, e-0 科学计数法形式,数字0的个数表示10的指数用几位数字表示 显示特殊字符。如可以是转义字符之一 xyz显示单引号内

31、的文本 “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 (00:0000

32、000, a); console.writeline (00:0000000, b); /#格式化说明符 console.writeline(n#格式化说明符:); console.writeline (00:0#, a); console.writeline (00:0#, b); /,格式化说明符 console.writeline(n,格式化说明符:); console.writeline (00:0, 1000000); /,用作倍增器 console.writeline (00:#,#,#0, 2000000); /,用作分隔符 console.writeline (00:#,#,#

33、0, 3); /%格式化说明符 console.writeline(n%格式化说明符:); console.writeline (00:0%, a); /将原数乘100% console.writeline (00:0%, b); /单引号格式化说明符 console.writeline(n单引号格式化说明符:); console.writeline (00:my number is: 0, a); console.writeline (00: my number is: 0, b); console.writeline (00: mine: 0, a); console.writeline

34、(00:mine:0, b); 5.2.2 格式化说明符 程序的执行结果: 0格式化说明符: 12340001234 12.340000012 #格式化说明符: 123401234 12.3400012 ,格式化说明符: 10000001 20000002,000,000 33 %格式化说明符: 1234123400% 12.341234% 单引号格式化说明符: 1234my number is: 1234 12.34my number is: 12 1234mine:1234 12.34mine:12 5.2.2 格式化说明符 【例5.6】使用for循环创建一个负数,然后将其递增为0和正数。

35、并且可以使用同一个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); c

36、onsole.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,我们可通过

37、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类的 对象。 例如,建立一个对象

38、表示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(闰年为

39、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对象对应的1

40、00纳秒数 续表 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

41、(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

42、.2.2 格式化说明符 l格式化日期和时间数据 在日常生活中,我们表示时间和日期的形式有多种。例如2002年 10月1日16:00是一种表达方式,而这一日期和时间也可表示为: 10/1/2002 4:00pm,除了这两种形式外,还有多种表达方式。如 何让程序在输出时能显示我们想要的日期和时间格式呢? 在datetime类中封装了write()方法,可以用来进行日期时间的格 式化操作。日期和时间数据的格式化说明符如表5.4所示。 5.2.2 格式化说明符 格式化说明符描 述默认格式输出范例(中文版) d 短日期mm/dd/yyyy2002-9-23 d长日期day ,month dd, yyyy

43、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:mm2002-9-23 16:00 g短日期长时间mm/dd/yyyy hh:mm:ss2002-9-23 16:00:00 m或m月份和天month dd9月23日 r或rrfc1123国际标准格 式 ddd,dd month yyyy hh:mm:s

44、s gmt mon,23 sep 2002 16:00:00 gmt siso8601标准格式yyyy-mm-dd hh:mm:ss2002-09-23 t16:12:23 t短时间 hh:mm am/pm12:30 pm t长时间hh:mm:ss am/pm12:30:54 pm u格林尼治时间yyyy-mm-dd hh:mm:ss2002-09-23 12:30:54z u格林尼治时间day, month dd, yyyy hh:mm:ss am/pm 2002-09-23 4:30:54pm y 或y年份和月份month,yyyy2002年9月 表5.4 日期和时间格式化说明符 注: 表

45、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, my

46、date2); 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.writ

47、eline(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 处理字符串的方法 u 5.3.1 string类的字符串方法 u 5.3.2 stri

48、ngbuilder类的字符串方法 u 5.3.3 parse( )方法 u 5.3.4 convert类 5.3 处理字符串的方法 前面已介绍了关于格式化字符串的所有知识,由于 字符串是一种特殊的数据类型,所以介绍有关方面 深入的应用问题。 5.3.1 string类的字符串方法 字符串变量是由关键字string来定义的,而string是system命名 空间中的一个类,所以对字符串进行操作可以调用string类的所 有属性和方法。 string类的方法调用格式为:string.方法名() 表5.5列出了一些string类常用的处理字符串的方法。有关表中方 法的参数和string类的其他方法可

49、参见msdn文档。 5.3.1 string类的字符串方法 方 法描 述 静态方法静态方法 compare(字串1, 字串2) 比较两个指定的string对象(字串)的值 compareordlinal比较两个字串的值,但不考虑区域性语言或其他国际化问题 concat连接string的一个或多个实例,或object的一个或多个实例的值的string 表示形式 copy创建一个与指定的string具有相同值的string的新实例 equals比较两个字串,以确定它们是否包含相同的值。如果是,返回true;否则返回false foramt将指定string的每个格式说明符替换为相应对象的值的文本等

50、效项 每个实例都有的方法和属性每个实例都有的方法和属性 chars获取此实例中位于指定字符位置的字符。在c#中,该属性为string类的索引器。 clone返回对string类实例的引用 compareto将当前字串同另一个字串进行比较。如果当前字串更小,返回一个负数;如相等,返回0;如更大,返回一 个正数 copyto将指定数目的字符从此实例中的指定位置复制到 unicode 字符数组中的指定位置 equals比较两个字串,以确定它们是否包含相同的值。如果是则返回true,否则返回false 表5.5 string类常用的字符串方法 5.3.1 string类的字符串方法 方 法描 述 in

51、dexof返回字串中第一次出现某个字符或字串索引(位置),如没有这样的字符或字串,则返回-1。 insert在实例中的指定索引位置插入一个指定的string类的实例。 lastindexof返回字串中最后一次出现某个字符或字串的索引(位置),如没有这样的字符或字串,则返回- 1。 length返回字串的长度,长度等于字串包含的字符数。 padleft将字串右对齐,并在左边填充指定的字符(或空格)。 padright将字串左对齐,并在右边填充指定的字符(或空格)。 remove从字串的指定位置开始删除指定数目的字符。 续表 5.3.2 stringbuilder类的字符串方法 当我们调用字符串方

52、法进行字符串的修改时,实际上将创建一个新的字符串,而存储在字符串中的某个字符是 不能修改的。 例如:以下代码运行后字符串中的字符不能被修改。 using system; class stringerror public static void main() string str=abcdefghijklmnop; /字符串虽是由字符数组组成,但不能将其中第6个字符改为x,! str5=x; /程序运行会出错 console.writeline(str); 程序运行后原字符串没有被修改,并且系统不正常退出。在实际应用中,使用表5.5中列出的处理字符串的方 法时,需要为处理后的新字符串另设一个空的

53、存储空间(即创建一个新的字符串对象)。例如,在本例中需要先 将前5个字符复制到另一个存储空间,然后输入第6个字符,最后将从第7个字符开始的字符串复制到后面。 如果确实需要修改字符串,则应该使用c#提供的stringbuilder类。命名空间system.text中的stringbuilder 类用于创建存储可修改字符串的对象。使用stringbuilder类创建的对象与用string类创建的字符串类似,差 别在于后者创建的字符串不能被修改,当要修改或操纵字符串时,必须再另创建一个新的字符串对象。而 stringbuilder类的对象包含的字符串信息可以被修改,该类的方法也可直接操纵字符串中存储

54、的值。表5.6列 出了stringbuilder类的方法和属性。 5.3.2 stringbuilder类的字符串方法 方法或属性描 述 append(字符串)在stringbuilder类实例的结尾追加指定对象的字符串 方法或属性描 述 appendformat向stringbuilder类实例中追加包含零个或更多格式规范的格式化字符串 capacity属性获取或设置可包含在当前stringbuilder类实例所分配的内存中的最大字符数 chars属性获取或设置stringbuilder类实例中指定字符位置处的字符 ensurecapacity确保stringbuilder的容量至少是指定的

55、值 equals返回一个值,该值指示stringbuilder类实例是否与指定对象相等 insert将指定对象的字符串表示形式插入到stringbuilder类实例中的指定字符位置 length设置或取得当前存储在stringbuilder类对象的长度值 maxcapacity取得stringbuilder类实例的最大容量 remove从当前实例的指定位置开始,删除指定数目的字符 replace将实例中所有指定的字符或字符串替换为其他的指定的字符或字符串 tostring将stringbuilder转换为string的字符串 表5.6 stringbuilder类的方法和属性 5.3.2 st

56、ringbuilder类的字符串方法 有关表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 ma

57、rker=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

58、) 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对象当前存储的值的长度 程序的输出结果: 请输入您的姓:刘(回车) 请输入您的姓名的最后一个字

温馨提示

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

评论

0/150

提交评论