常用类库之.NET中的字符串

字符串的特性

1.不可变性
       由于字符串是不可变的的,每次修改字符串,都是创建了一个单独字符串副本(拷贝了一个字符串副本)。之所以发生改变只是因为指向了一块新的地址。
 
2.字符串池(只针对字符串常量)
      当一个程序中有多个相同的字符串常量时,多个变量指向的是内存中同一块字符串!这个特性叫字符串池。之所以字符串,不会造成程序混乱,是因为字符串的不可变性。
 

String的成员方法和属性

PS:这里重载方式很多,不一一列举。

1.Contains(String str)  判断字符串中是否包含,指定字符串。

用法

string str ="helloworld";

str.Contains("hello");   //true

2.StartsWith(String str)

判断字符串对象是否以,指定字符串开头。

3.EndWith(String str)

判断字符串对象是否以,指定字符串结尾。

4.Length 属性

         获取字符串的长度

5.IndexOf(String str)

获取指定字符/字符串.....在对象字符串中第一次出现的位置。

6.LastIndexOf(String str)

获取指定字符/字符串....在对象字符串中最后一次 出现的位置。

7.SubString(int start)

   SubString(int strat, int length)   从指定位置,截取字符串。

8.ToLower()

将串转换成小写,返回一个新的全小写的字符串。

9.ToUpper()

将串转换成大写,返回一个新的全大写的字符串。

10. Replace(string oldStr,string newStr)

用新的字符串,替换对象字符串中老的字符串部分。

11.Trim()   去掉对象字符串两端的空格

TrimStart() 去掉对象字符串 开头的空格

TrimEnd()  去掉对象字符串  结尾的空格

PS:如果想去掉其他的开头结尾的其他字符其他的字符,可以采用Trim()的其他重载。

12.Split()     把对象字符串,按照指定字符分割成一个字符串数组!

Split()    的重载同样很多,

例如 Split(new char[]{'|'}, StringSplitOption.RemoveEmptyEntries)// 删除空数据

String的静态方法

1.IsNullOrEmpty(string)

//string.IsNullOrEmpty(str1) 判断某字符串是否为null,或者为空字符串。

2.Equals(string,string,StringComparison.OrdianlIgnore)
        忽略大小写比较两个字符串是否相同。
3.Join(string,string[])
        把一个数组按照指定字符串,拼接成一个字符串。
.NET中的计时器控件Timer

本章借介绍一些粗浅的Timer控件使用方法。

介绍Timer控件的常用属性和事件

1. Interval 属性表示 Timer控件的时间间隔。

类型是int默认是毫秒。

2. Enabled 属性 表示Timer控件是否激活。

如果激活的话,一进入Timer的Tick事件就开始执行。所以默认是false

3. Start() 方法

开始执行

4. Stop() 方法

停止执行

5. Tick  事件

表示Timer控件将要执行的代码。

常规使用方式

1.添加一个Timer控件

2.设置好必要的属性后。直接写 timer_Tick事件。在事件中写个停止条件就好了。

使用Lambda表达式调用Timer

Timer timer = new Timer();

timer.Interval = 100;

//使用Lambda表达式

timer.Tick += (sender,e) =>

{

if (巴拉巴拉巴拉)

{

          timer.Stop();

}

};

timer.Start();

.NET中的StringBuilder

为什么要使用StringBuilder

为什么使用StringBuilder要从string对象的特性说起。

string对象在进行字符串拼接时,因为字符串的不可变性,string对象会每次拼接,都会复制一个副本出来进行运算,而本身的串仍然留在内存中,大量的临时片段会造成不可忽视的性能损耗。所以在进行大量的字符串拼接时建议使用StringBuilder

StringBuilder的简单使用方式

string s1 = "33";

string s2 = "44";

string s3 = "55";  //需求是把  s1 s2 s3拼接在一起。这是一种典型的字符串拼接。

//使用StringBuilder ,不会产生无用的临时字符串。

StringBuilder sb =new StringBuilder();

//拼接方式一

sb.Append(s1);

sb.Append(s2);

sb.Append(s3);

//拼接方式二   

//因为Append()方法会返回一个this,也就是对象本身。所以可以使用这种方式。

//链式编程  Jquery中常用这种方式

sb.Append(s1).Append(s2).Append(s3);

//最后把sb.ToString()一下就好了。

PS:AppendLine()方法可以 自动添加一个回车。

 
.NET 中的DateTime

DateTime简介

DateTime是.NET中的时间类型,可以通过DateTime完成诸如获取当前的系统时间等操作。
DateTime在.NET中是一个结构体,而并不是一个类。

如上图所示,这个图标在VS中 表示结构体。

DateTime的常用方法和成员

1.Now
获取当前系统时间。格式如下图

2.Today
获取当前今日日期。格式如下图

3.年 月 日 时 分 秒
接下来的几个对象,必须通过
DateTime.Now(或者DateTime.Today)再点才能引用的到。
  Year      获取年       Hour      获取小时
  Month  获取月       Minute  获取分钟
  Day      获取日        Second  获取秒

//以Year为例:DataTime.Now.Year

4.DayOfWeek、DayOfYear
获取当前日期是星期几

以及获取当前日期是一年中的第几天

5.TryParse()
判断是否是时间类型,参数中有一个out可以输出一个DateTime对象。

6.AddDays()、AddHours() 

在当前时间基础上加几天  返回一个DateTime
在当前日期基础上加几个小时  返回一个DateTime
7.Subtract(DateTime.Now)

比较两个时间的 时间差   返回一个TimeSpan

日期时间格式字符 ToString()

预定义模式
DateTime date =DateTime.Now;
date.ToString(format
  参数format格式详细用法
格式字符 关联属性/说明
d ShortDatePattern
D LongDatePattern
f 完整日期和时间(长日期和短时间)
F FullDateTimePattern(长日期和长时间)
g 常规(短日期和短时间)
G 常规(短日期和长时间)
m、M MonthDayPattern
r、R RFC1123Pattern
s 使用当地时间的 SortableDateTimePattern(基于 ISO 8601)
t ShortTimePattern
T LongTimePattern
u UniversalSortableDateTimePattern 用于显示通用时间的格式
U 使用通用时间的完整日期和时间(长日期和长时间)

y、Y YearMonthPattern

自定义模式
 d 月中的某一天。一位数的日期没有前导零。
dd 月中的某一天。一位数的日期有一个前导零。
ddd 周中某天的缩写名称,在 AbbreviatedDayNames 中定义。
dddd 周中某天的完整名称,在 DayNames 中定义。
M 月份数字。一位数的月份没有前导零。
MM 月份数字。一位数的月份有一个前导零。
MMM 月份的缩写名称,在 AbbreviatedMonthNames 中定义。
MMMM 月份的完整名称,在 MonthNames 中定义。
y 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示不具有前导零的年份。
yy 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示具有前导零的年份。
yyyy 包括纪元的四位数的年份。
gg 时期或纪元。如果要设置格式的日期不具有关联的时期或纪元字符串,则忽略该模式。
h 12 小时制的小时。一位数的小时数没有前导零。
hh 12 小时制的小时。一位数的小时数有前导零。
H 24 小时制的小时。一位数的小时数没有前导零。
HH 24 小时制的小时。一位数的小时数有前导零。
m 分钟。一位数的分钟数没有前导零。
mm 分钟。一位数的分钟数有一个前导零。
s 秒。一位数的秒数没有前导零。
ss 秒。一位数的秒数有一个前导零。

.NET中的异常和异常处理

.NET中的异常(Exception)

.net中的中异常的父类是Exception,大多数异常一般继承自Exception。

可以通过编写一个继承自Exception的类的方式,自定义异常类!

异常处理机制

Try

{

可能发生异常的代码

后续代码

}

Try以外的代码

catch(Exception e)

{

}

finally

{

}

上述代码描述如下

1.谁能执行 在异常处理中,一旦try里面有了问题,程序会放弃异常的后续代码直接跳到catch中。

执行完了catch中的代码,继续执行Try以外的代码。

2.关于catch()中的参数e

e就是发生异常的异常类对象,可以任意取名。不是必须叫e的。

3.只抛一个

一块try中的代码只能抛出一个异常。

为什么呢?

因为一旦异常就抛出了啊,后面有也不执行了呀!

4.获取信息

可以通过 e.Message获取异常信息

5.必须执行

finally  无论如何都会执行

6.可以没有catch

可以只有 try catch

也可以只有try  finally

优秀的异常处理作风

1.不要逃避问题不要只把异常catch住,什么都不做,或者只是打印一下,这不是优秀的“异常处理”作风。

不知道怎么处理异常,就不要catch。让他暴露出来。既然发生异常了,问题就肯定是有的,逃避不是办法,直面他,才能解决他。尤其在分层的项目中。会让程序陷入深度的逻辑混乱状态。而问题被藏起来了,你甚至不知道哪里发生了问题。

2.如果真的遇到乱try、catch的程序员怎么办?

vs很强大,它想到了这种情况。点击【调试】【异常】进入这样一个工具,选中第二行 的引发选项。

这样在调试的时候,无论是否try  catch都会暴漏出异常。我们想要的信息就找到了。

 

.NET中的IO操作基础介绍

关于IO简介

.NET中的IO操作,经常需要调用一下几个类。

 

1.FileStream类       

文件流类,负责大文件的拷贝,读写。

2.Path类                  

Path类中方法,基本都是对字符串(文件名)的操作,与实际文件没多大关系。

3.File类           

      File类可以进行一些对小文件拷贝、剪切操作,还能读一些文档文件。

4.Dirctory            

      目录操作,创建文件、删除目录,获取目录下文件名等等。

Path类

1.ChangeExtension(path,".jpg")

改变文件后缀名!

2.Combine(s1,s2)

将两个路径连起来

3.获取文件名的几个方法

1)Path.GetFileName(s1);   //获取路径中的文件名

2)Path.GetFileNameWithoutExtension(s1);   //获取文件名,不包括后缀名!

3)Path.GetDirectoryName(s1)//获取路径中的目录不包括文件名。

4)Path.GetExtension(s1);  //只获取扩展名

4.GetFullPath("")

获取完整路径,根据相对路径获得绝对路径。

5.临时目录

1)GetTempPath()     //获取当前用户的临时目录

2)GetTempFileName()    //获取一个随机的文件名,并在临时目录下创建这个文件。

3)GetRandomFileName()   //仅获取一个随机文件名。

Directory类

1.创建目录

Directory.CreateDirectory(@"目录");

2.判断某个目录是否存在某文件

string path =@"路径";

if(Directory.Exists(path))

{

}

3.删除目录

1)Directory.Delete(path); //删除空目录  ,目录下没有文件了。

2)Directory.Delete(path,true); //不管空不空,都删!

3)如果没有目录就会报异常,最好用if(Directory.Exists(path))判断一下。

4.移动文件目录

重命名目录也用这个来做。

Directory.Move(@"c:\a",@"c:\abc");

5.DirectoryInfo

可以把文件夹当作对象来使用

DirectoryInfo dirInfo = new DirectoryInfo(@"path");

6.获取当前目录下的所有直接子目录 和 直接子文件

//获取目录下的直接子目录

String[] dirs =Direcotory.GetDirectories(@"目录");

//获取目录下的直接子文件

String[] files =Directory.GetFiles(@"目录");

7.获取当前目录下的目录和文件  另一种方式

//获取目录下的直接子目录

//String[] dirs =Direcotory.GetDirectories(@"目录");

//获取目录下的直接子文件

//String[] files =Directory.GetFiles(@"目录");

//—————————以上是6中的做法,他有一定性能上的问题。什么问题呢?—————————————

使用String[] dirs =Direcotory.GetDirectories(@"目录");是必须要等获取了整个string之后,才能遍历这个集合。

如果希望,读到一条处理一条。

建议使用Directory.EnumerateFile()

1)EnumerateFile返回的是一个实现了IEnumerable接口的集合。实际上使用了迭代器模式。

2)SearchOption.ALLDirctories参数,会让.EnumerateFile()遍历所有子目录下的文件。

File类

1.拷贝

File.Copy("Source"," Target",true);

2.判断是否存在

File.Exists(@"Source") ;

3.剪切

File.Move("Source","Targe");

4.创建

File.Create("path");

5.删除

File.Delete("path"); //删除,若没有,不报错!

6.读操作

1)File.ReadAllLines("path",Encoding.Default);   //返回一个string[]

2)File.ReadAllTest("path",Encoding.Default);    //string

3)File.ReadAllBytes("path");

7.写操作

1)File.WriteAllLines("path",new string[4],Encoding.Default);//按行写入一个文件中。

2)File.WriteAllText("path","string");

3)File.WriteAllBytes("path",new byte[4]);

4)File.AppendAllText();   //将string追加到文件中。

8.返回FileStream的快捷方式

1)File.Open(string,FileMode);   //返回一个FileStream

2)File.OpenRead(string,FileMode);  //返回一个只读的 FileStream

3)File.OpenWrite(string,FileMode);  //返回一个只写的 FileStream

.NET中的IO操作之文件流

读操作

//1.创建文件流

FileStream fsRead =new FileStream("1.txt",FileMode.Open);

//2.创建缓冲区,正常情况下,是不会直接等于文件大小的。这里只有读,所以就这么干了。

byte[] bytes =new byte[fsRead.Length];

//3.开始读取, 返回值是读取到的长度。

int r =fsRead.Read(bytes,0,bytes.Lenght);

//4.关闭释放流

fsRead.Close();

fsRead.Dispose();

写操作

//1.创建写入的文件流

FileStream fsWrite fsWrite =new FileStream(@"xxx",FileMode.OpenOrCreate);

//2.创建缓冲区

String msg ="HelloWorld";

byte[] bytes =Enconding.UTF8.GetBytes(msg);

//3.开始写入

fsWrite.Write(bytes,0,bytes.Length);

//4.关闭

fsWrite.Close();

fsWrite.Dispose();

byte数组与string之间的转换

/*在文件流写入的时候,经常需要string 和 byte数组之间的转换。

这里简单的描述一下,这方面的做法。*/

1.string 到 byte[]数组。

string msg ="HelloWorld";

//使用UTF8编码

byte[] bytes =System.Text.Encoding.UTF8.GetByte(msg);

//使用系统默认编码

byte[] bytes =System.Text.Encoding.Default.GetByte(msg);

2.byte[]到string

string newMsg =System.Text.Encoding.UTF8.GetString(bytes);

编码问题

为什么中文会乱码?

UTF8 编码中,一个中文字符占用两个字节。

GBK  编码中,一个中文字符占用三个字节。

UTF8 编码中,用两个字节保存一个汉字,如果你用GBK读取,按照三个字节一个字的格式去读。当然乱码了。反之也是一样的。

总结起来,无论是36码的鞋子,穿在50码的脚丫子上。还是36码的脚丫子,穿50码的鞋。看起来都不会很舒服。

所以,按照什么格式写入,就按照什么格式读取。才是正解。

PS:1.Utf8是国际标准。

2.GB2312  是国标编码,支持中文的。

3.GBK是对GB2312的扩展,支持繁体中文。

什么类可以Dispose( )?

1.Dispose()表示释放资源,.NET中对Dispose()有一个统一的约定或者叫描述。这个约定表现为一个接口。

或者说这个接口,是一个红头文件,红头文件中约定了如何释放资源。

所有实现了IDisposable接口的类都可以释放,可以Dispose();

那么类库中什么样的类会实现IDisposable接口呢?

我的理解是这样的,一般仅占用托管堆中内存资源的类或对象。一般不需要Dispose()。垃圾回收就搞定了。

但是对于,文件句柄,网络端口号,数据库连接等,CLR的垃圾回收机制是不管的。

所以一般这部分内容需要实现IDisposable接口。

文件流操作的异常处理

//只有把fs定义在这里,finally中才能引用得到。

FileStream fs =null;

try

{

fs =new FileStream(@"文件路径",FileMode.Create);

byte[] bytes = Encoding.Default.GetBytes("HelloWorld");

fs.Write(bytes,0,byte.Length);

}

finally

{

if(fs != null)  //如果fs未赋值,那么直接Dispose就会引发空指针异常。

{

fs.Dispose();

}

}


简化上述的写法,虽然严谨但是稍微有点麻烦。Microsoft提供了语法糖。
就是using的语法
using(某个可以释放资源的类)
{
      操作
}
//1.操作执行完,会自动释放。
//2.using语句编译完成以后,会形成跟上面类似的代码。就是使用try  finally。

StreamWriter和StreamReader

//按行写入

StreamWriter sw =new StreamWriter(@"target",true,Encoding.GetEnconding("GB2312"));

sw.WriteLine("HelloWorld");

//按行读取

StreamReader sr =new StreamReader(@"Source");

sr.ReaderLine();  //每次返回一个字符串

.NET常用类库知识总结的更多相关文章

  1. Java必知必会的20种常用类库和API

    转载:https://blog.csdn.net/u011001084/article/details/79216958 个人感觉工具类对日常开发是很重要的,所以推荐一下这篇文章,虽然有的类库过时了 ...

  2. Java 常用类库与技巧【笔记】

    Java 常用类库与技巧[笔记] Java异常体系 Java异常相关知识 Java在其创立的时候就设置了比较有效的处理机制,其异常处理机制主要回答了三个问题:what,where,why what表示 ...

  3. Google的Java常用类库 Guava资料

    java的人应该都知道Apache commons的java常用类库吧,这个Guava和commons一样,封装出一套比jdk本身提供的常用类库强大.既然有了这个这么强大的类库,我们就没必要重复造轮子 ...

  4. C#基础精华03(常用类库StringBuilder,List<T>泛型集合,Dictionary<K , V> 键值对集合,装箱拆箱)

    常用类库StringBuilder StringBuilder高效的字符串操作 当大量进行字符串操作的时候,比如,很多次的字符串的拼接操作. String 对象是不可变的. 每次使用 System. ...

  5. paip.c++ 常用类库attilax总结

    paip.c++ 常用类库attilax总结 VCL: WINDOWS平台最好的类库了..推荐使用..开发效率最高. 1 QT..推荐使用..开发效率比较高. 1 GTK(GTKMM)...开发效率没 ...

  6. [Windows Phone]常用类库&API推荐

    原文 [Windows Phone]常用类库&API推荐 简介: 把自己的应用程序搭建在稳定的API之上,这会使得我们在开发时能把精力都集中在程序的业务逻辑之上,避免重复造轮子,并且使得程序结 ...

  7. Word常用实用知识1

    Word常用实用知识1 纯手打,可能有错别字,使用的版本是office Word 2013 转载请注明出处,谢谢. 快速输入日期(含格式) [插入]--[日期]   快速输入日期和时间(快捷键) 快速 ...

  8. JAVA(三)JAVA常用类库/JAVA IO

    成鹏致远 | lcw.cnblog.com |2014-02-01 JAVA常用类库 1.StringBuffer StringBuffer是使用缓冲区的,本身也是操作字符串的,但是与String类不 ...

  9. Android之常用类库

    Android之常用类库 android.app :提供高层的程序模型.提供基本的运行环境android.content :包含各种的对设备上的数据进行访问和发布的类android.database ...

随机推荐

  1. linux下的gedit命令使用方法与技巧

    1.启动:   从菜单启动:应用程序——>附件——>文本编辑器   从命令行执行以下命令: gedit   2.窗口说明:   菜单栏:包含您在 gedit 中处理文件所需的所有命令.   ...

  2. 配置HylaFAX传真服务器

    配置HylaFAX传真服务器转自 http://blog.chinaunix.net/uid-8551991-id-248081.html参考:http://www.hylafax.org/howto ...

  3. [ActionScript 3.0] AS3 时间日期格式化DateTimeFormatter类的运用

    import flash.globalization.DateTimeFormatter; var _timeFormatter:DateTimeFormatter; var _dateFormatt ...

  4. wall 和panel有啥区别

    Panel指的是一个面板,用它来对一些控件进行分组,就像组合框控件,即Visual Studio里面用的Group Box Control:而在一些软件界面里面也可以表现为工具条,比如编辑工具条.文件 ...

  5. SQL查询包含汉字的行

    1.查询字段首位为汉字 2.查询字段包含汉字(任意位) SELECT * FROM 表名 WHERE 字段 LIKE '%[吖-座]%' --[吖-座]是中文字符集第一个到最后一个的范围

  6. (medium)LeetCode 221.Maximal Square

    Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's and ret ...

  7. Oracle GoldenGate 11.2 OGG-01168(转)

    为客户部署的Oracle GoldenGate在测试阶段出现如下的错误: 2012-04-24 10:45:20  ERROR   OGG-01168  Oracle GoldenGate Deliv ...

  8. JDBC数据更新

    在JDBC中通常用Statement类的对象实现对数据库的更新(增.删.查.改)操作 //1.获取数据库连接 connection = getConnection(); //2.准备sql语句 Str ...

  9. 组合vs继承

    继承,建立子类. 组合(或聚集),在类定义中引用其它类的实例.

  10. 动手学servlet(四) cookie和session

    Cookie   cookie是保存在客户端的一个“键值对”,用来存储用户的一些信息 cookie的应用: -在电子商务会话中标识用户 -对网站进行定制,比如你经常浏览哪些内容,就展示哪些页面给你 - ...