特供.net基础视频教程2014版第二十天_第1页
特供.net基础视频教程2014版第二十天_第2页
特供.net基础视频教程2014版第二十天_第3页
特供.net基础视频教程2014版第二十天_第4页
特供.net基础视频教程2014版第二十天_第5页
免费预览已结束,剩余24页可下载查看

付费下载

下载本文档

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

文档简介

北京传智播客教育.Net基础加强讲师:老赵常用类库学习.net就是学习它的无数个类库怎么用,先看两个简单的String字符串,字符串可以看成字符数组,不可变特性(通过for循环,修改string中的元素,失败!)。属性Length//获得字符串中字符的个数。”aA我你他”→5方法IsNullOrEmpty() 静态方法,判断为null或者为””ToCharArray()将string转换为char[]ToLower() 小写,必须接收返回值。(因为:字符串的不可变);ToUpper()大写。Equals() 比较两个字符串是否相同。忽略大小写的比较,paration.Contains是否包含IndexOf()如果没有找到对应的数据,返回-1 LastIndexOf() 如果没有找到对应的数据,返回-1Substring() //2个重载,截取字符串。Split()//分割字符串。 Join() 静态方法Replace() Trim()注意:对字符串的操作一定要用变量接收返回值。(字符串是不能变的,每次都是构建一个新的字符串)strings=“abc”;s=s.Replace(‘c’,’C’);字符串的处理练习1课上练习1:接收用户输入的字符串,将其中的字符以与输入相反的顺序输出。"abc"→"cba"课上练习2:接收用户输入的一句英文,将其中的单词以反序输出。“Iloveyou"→“ievoluoy"课上练习3:”2012年12月21日”从日期字符串中把年月日分别取出来,打印到控制台字符串的处理练习2练习5:123-456---789-----123-2把类似的字符串中重复符号去掉,既得到-123-2.split()、StringSplitOptions.RemoveEmptyEntriesJoin()练习6:从文件路径中提取出文件名(包含后缀)。比如从c:\a\b.txt中提取出b.txt这个文件名出来。以后还会学更简单的方式:“正则表达式”,项目中我们用微软提供的:Path.GetFileName();(更简单。)练习7:求员工工资文件中,员工的最高工资、最低工资、平均工资张三,100李四,200王五,20赵六,190田七,980常用类库StringBuilder高效的字符串操作当大量进行字符串操作的时候,比如,很多次的字符串的拼接操作。String对象是不可变的。每次使用System.String类中的一个方法时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新的String对象相关的系统开销可能会非常大。如果要修改字符串而不创建新的对象,则可以使用System.Text.StringBuilder类。例如,当在一个循环中将许多字符串连接在一起时,使用StringBuilder类可以提升性能。StringBuilder!=String//将StringBuilder转换为String.用ToString();StringBuilder仅仅是拼接字符串的工具,大多数情况下还需要把StringBuilder转换为String.StringBuildersb=newStringBuilder();sb.Append();//追加字符串sb.ToString();//把StringBuilder转换为字符串。sb.Insert();sb.Replace();案例:使用程序拼html中的table集合类(增、删、查、改、遍历)集合常用操作添加、遍历、移除命名空间System.Collections

ArrayList可变长度数组,使用类似于数组属性Capacity(集合中可以容纳元素的个数,翻倍增长);Count(集合中实际存放的元素的个数。)方法Add()AddRange(Icollectionc)

Remove()RemoveAt()Clear()Contains()ToArray()Sort()排序\Reverse();//反转Hashtable键值对的集合,类似于字典,Hashtable在查找元素的时候,速度很快。Add(objectkey,objectvalue);hash[“key”]hash[“key”]=“修改”;.ContainsKey(“key”);Remove(“key”);遍历:hash.Keyshash.Values/DictionaryEntry案例:两个(ArrayList)集合{“a”,“b”,“c”,“d”,“e”}和{“d”,“e”,“f”,“g”,“h”},把这两个集合去除重复项合并成一个。案例:随机生成10个1-100之间的数放到ArrayList中,要求这10个数不能重复,并且都是偶数(添加10次,可能循环很多次。)Randomrandom=newRandom();random.next(1,101);//随即生成1-100之间的数。练习:有一个字符串是用空格分隔的一系列整数,写一个程序把其中的整数做如下重新排列打印出来:奇数显示在左侧、偶数显示在右侧。比如”2783229511”显示成”7392822….”。注意事项:不要把Random的实例化放到循环里面可以使用两个集合来降低产生随机数的循环次数。Random在循环中会降低执行效率(每次new的时候的种子是一样的,当前时间。)(*)。泛型集合:使用泛型集合书橱命名空间System.Collections.GenericList<T>类似于ArrayList,ArrayList的升级版。各种方法:Sort()、Max()、Min()、Sum()…Dictionary<K,V>类似于Hashtable,Hashtable的升级版。推荐使用泛型集合。T,K,V就像一把锁,锁住集合只能存某种特定的类型,这里的T,K,V也可以是其它字母

泛型集合可以进行foreach遍历,是因为实现了IEnumerable<T>具有了GetEnumerator()方法泛型集合案例:把分拣奇偶数的程序用泛型实现。int[]nums={1,2,3,4,5,6,7,8,9};奇数在左边偶数在右边练习1:将int数组中的奇数放到一个新的int数组中返回。将数组中的奇数取出来放到一个集合中,最终将集合转换成数组。练习2:从一个整数的List<int>中取出最大数(找最大值)。练习:把123转换为:壹贰叁。Dictionary<char,char>“1一2二3三4四5五6六7七8八9九”练习:计算字符串中每种字符出现的次数(面试题)。“etoChinaworld”,不区分大小写,打印“W2”“e2”“o3”……提示:Dictionary<char,int>,char的很多静态方法。char.IsLetter()案例:两个(ArrayList)集合{“a”,“b”,“c”,“d”,“e”}和{“d”,“e”,“f”,“g”,“h”},把这两个集合去除重复项合并成一个。神奇的Dictionary自己动手写Dictionary<string,string>。Dictionary性能测试。为什么速度这么快?查字典为什么能这么快?目录中记录了每个汉字的页码,查找的时候先看汉字的页码,再翻到指定的页就可以非常快速的找到词条了。Dictionary中有一个存储键值对的区域,这个区域的每个存储单元有地址编号,根据hashCode算法,计算key的值的键值对应该存储的地址,将键值对放入指定的地址即可。查找的时候首先计算key的地址,就可以找到数据了。根据key找房间号,而不是逐个房间找。(*)为什么Dictionary这么快:当把一个kvp,采用一个固定算法(散列算法)根据key来计算这个kvp存放的地址。取的时候也是根据要找的key可以快速算出kvp存放的地址。文件操作常用相关类File//操作文件,静态类,对文件整体操作。拷贝、删除、剪切等。Directory//操作目录(文件夹),静态类。Path//对文件或目录的路径进行操作(很方便)【字符串】Stream//文件流,抽象类。FileStream//文件流,MemoryStream(内存流),NetworkStream(网络流)StreamReader//快速读取文本文件StreamWriter//快速写入文本文件Path类(对字符串操作),不用刻意记。目录和文件操作的命名控件System.IOstringChangeExtension(stringpath,stringextension)(*)修改文件的后缀,“修改”支持字符串层面的,没有真的给文件改名strings=Path.ChangeExtension(@"C:\temp\F3.png","jpg")stringCombine(stringpath1,stringpath2)将两个路径合成一个路径,比用+好,可以方便解决不加斜线的问题,自动处理路径分隔符的问题strings=bine(@"c:\temp","a.jpg")stringGetDirectoryName(stringpath)(*)得到文件的路径名。Path.GetDirectoryName(@"c:\temp\a.jpg")stringGetExtension(stringpath)得到文件的扩展名stringGetFileName(stringpath)得到文件路径的文件名部分stringGetFileNameWithoutExtension(stringpath)得到去除扩展名的文件名stringGetFullPath(stringpath)得到文件的全路径。可以根据相对路径获得绝对路径。知识补充1(*)bine(path1,path2),见MSDN如果指定的路径之一是零长度字符串,则该方法返回其他路径。如果path2包含绝对路径,则该方法返回path2。如果path1不是以分隔符结束,并且不是c:或d:等(驱动器引用),则在串联前为path1增加\分隔符。分隔符:(与操作系统平台有关)Path.DirectorySeparatorChar→\Path.PathSeparator→;Path.VolumeSeparatorChar→:Path.GetFileName()获取文件名当目录为c:\windows\test时,可获取最后一个目录名,但当目录路径为c:\windows\test\时,不可以。reflector查看知识补充2(*)获取当前exe文件执行的路径:Assembly.GetExecutingAssembly().Location;Application.StartupPath.不要用:Directory.GetCurrentDirectory();获取应用程序的当前工作目录。因为这个可能会变,通过使用OpenFileDialog或者手动设置Directory.SetCurrentDirectory()做WinForm程序时会常用到。操作文件(File)文本文件编码,文本文件有不同的存储方式,将字符串以什么样的形式保存为二进制,这个就是编码,UTF-8、ASCII、Unicode等,如果出现乱码一般就是编码的问题,文本文件相关的函数一般都有一个Encoding类型的参数,取得编码的方式:Encoding.Default、Encoding.UTF8、Encoding.GetEncoding("GBK")输出Encoding.GetEncodings(),所有编码。什么是文本文件。拖到记事本中还能看得懂的就是文本文件,doc不是。File类的常用静态方法:(FileInfo*)voidAppendAllText(stringpath,stringcontents),将文本contents附加到文件path中boolExists(stringpath)判断文件path是否存在string[]ReadAllLines(stringpath)读取文本文件到字符串数组中stringReadAllText(stringpath)读取文本文件到字符串中voidWriteAllText(stringpath,stringcontents)将文本contents保存到文件path中,会覆盖旧内容。WriteAllLines(stringpath,string[]contents),将字符串数组逐行保存到文件path中,会覆盖旧内容。File类的方法1File.Copy(“source”,“targetFileName”,true);//文件拷贝,true表示当文件存在时“覆盖”,如果不加true,则文件存在报异常。File.Exists();//判断文件是否存在File.Move(“source”,“target”);//移动(剪切),思考如何为文件重命名?File.Delete(“path”);//删除。如果文件不存在?不存在,不报错File.Create(“path”);//创建文件File类的方法2:操作文本文件File.ReadAllLines(“path”,Encoding.Default);//读取所有行,返回string[]File.ReadAllText(“path”,Encoding.Default);//读取所有文本返回stringFile.ReadAllBytes(“path”);//读取文件,返回byte[],把文件作为二进制来处理。===========================================File.WriteAllLines(“path”,newstring[4],Encoding.Default);//将string数组按行写入文件。File.WriteAllText(“path”,“string”);//将字符串全部写入文件File.WriteAllBytes(“path”,newbyte[5]);//将byte[]全部写入到文件File.AppendAllText()//将string追加到文件File类的方法3:快速得到文件流FileStreamfs=File.Open();//返回FileStreamFileStreamfs=File.OpenRead();//返回只读的FileStreamFileStreamfs=File.OpenWrite();//返回只写的FileStreamFileStreamfs=newFileStream(参数);Stream(所有流的父类,是一个抽象类。)文件操作的类都在System.IO.*;文件流?两个大水缸,把一个缸中的水倒入另一个水缸中。两种方式:直接把一个缸中的水倒入另一个缸中用个桶来把一个缸中的水舀到另一个缸中。使用FileStream写入文本文件。演示通过FileStream写入读取文本文件。对于中文如果每次读取1个byte会有什么效果?更好的选择→StreamReader使用FileStream读取文本文件。使用FileStream进行大文件拷贝。演示File.ReadAllBytes()与File.WriteAllBytes()进行文件拷贝。(查看内存使用情况)只有使用using可以方便的释放资源(自动调用Dispose方法)实现了IDispose接口的类才能使用using释放资源练习byte[]是任何数据的最根本表示形式,任何数据最终都是二进制。使用using来简化操作。//总结:不是任何类型的对象都可以写在using()的小括号里面的//只有实现了IDisposable接口的类型的对象,才能写在using的小括号里面//当using{}执行完毕时,会自动调用对象的Dispose()方法来释放资源。大文件拷贝。

Read用户读取若干字节。(*)//可以手动设置获取该值。FileStream的参数介绍。与快速创建文件流。Unicode(utf-16):前两个字节StreamWriter(读取文本文件)Stream把所有内容当成二进制来看待,如果是文本内容,则需要程序员来处理文本和二进制之间的转换。用StreamWriter可以简化文本类型的Stream的处理StreamWriter是辅助Stream进行处理的using(StreamWriterwriter=newStreamWriter(stream,encoding)){writer.WriteLine("你好");}StreamReader和StreamWriter类似,StreamReader简化了文本类型的流的读取。Streamstream=File.OpenRead("c:/1.txt");using(StreamReaderreader=newStreamReader(stream,encoding)){//Console.WriteLine(reader.ReadToEnd());Console.WriteLine(reader.ReadLine());}ReadToEnd用于从当前位置一直读到最后,内容大的话会占内存;每次调用都往下走,不能无意中调用了两次ReadLine读取一行,如果到了末尾,则返回null。★说一下快速创建流的那几个方式。★练习案例:对职工工资文件处理,所有人的工资加倍然后输出到新文件。文件案例:马大哈|3000宋江|8000提示:先获得FileStreamFile.OpenRead(path);File.OpenWrite(path);再用FileStre

温馨提示

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

评论

0/150

提交评论