第五章、DotNet基本常用类库

1、String成员方法(常用)

bool Contains(String str);判断字符串对象是否包含给定的字符串;

bool StartsWith(String str);判断字符串对象是否以给定的字符串开始;

bool EndWith(String str);判断字符串是否以给定的字符串开始;

int IndexOf(char ch);返回指定字符在此字符串中第一次出现的索引

int IndexOf(String str);返回指定字符串在此字符串中第一次出现的索引

LastIndexOf:最后一次出现的位置

String Substring(int start);截取字符串。返回从指定位置开始截取后的字符串

string Substring(int start,int length) 截取字符串。返回从指定位置开始截取指定长度length的字符串

String ToLower(); 把字符串变成小写

String ToUpper(); 把字符串变成大写

String Replace(char oldChar,char newChar); 用新的字符去替换指定的旧字符

String Replace(String oldStr,String newStr); 用新的字符串去替换旧的字符串

String Trim(); 去除字符串两端的空格

String TrimStart(); 去除字符串开头的空格

String TrimEnd(); 去除字符串结尾的空格、

String Trim(params char[] trimChars); 去掉两端给定的字符

注意:String是不可变的,因此上面的操作都是生成新的字符串对象,要用返回值去取新的字符串

String[] Split(...):重载方法很多,字符串按照分隔符切割。案例:把字符串用","分割

案例:给一个全班数学考试成绩的字符串“50, 80,33,58,99,  82”,成绩用逗号分隔,有的成绩中可能有空格,有的地方逗号是英文、有的逗号是中文。统计班级的平均分。

  1. //计算写在字符串的成绩的平均分
    string score ="46,74 ,72,56,45 ,62";
    string[] newScore = score.Replace(" ","").Replace(‘,‘,‘,‘).Split(‘,‘);
    int sum =0;
    for(int i =0; i < newScore.Length; i++)
    {
    sum +=Convert.ToInt32(newScore[i]);
    }
    Console.WriteLine(sum*1.0/newScore.Length);
String静态方法:

bool IsNullOrEmpty(string value); 判断字符串是否为null或者是空字符串;

bool Equals(string a,string b,StringComparison.OrdinalIgnoreCase);不区分大小写比较。案例验证码

string Join(string separator,params string[] value); 把一个数组(集合)用分隔符separator连接为一个字符串

2、StringBuilder

string str="111"+"42452"+"4624631"+"aaab";
字符串与字符串连接,每次连接都会生成一个String对象,当连接字符串较多时,就会产生较多的临时字符串对象
使用StringBuilder则拼接字符串则不会有临时字符串的问题
StringBuilder sb = new StringBuilder();
sb.Append("111");
sb.Append("42452");
...
因为Append方法是把this返回了,还可以sb.Append("111").Append("42452")...;
String s = sb.ToString();一次性生成拼接结果字符串即可
AppendLine 追加字符串后添加换行符

3、可空的int

int等是值类型,不能为null。有时想表达“不知道数字是多少”的时候,用int任何值表示都不合适
C#中可以用给“int?”表示“可空的int类型”。注意类型转换

4、日期

.Net使用DateTime类表示时间数据类型。DateTime属于结构体,因此也是值类型

DateTime.Now当前时间;

DateTime.Today当前日期;

可以通过Year、Month、Hour 等属性得到日期的年、月、日、小时等部分;也可以用构造函数根据给定的时间创建一个对象

5、异常概念

异常发生在程序发生的不正常情况下。异常以一个异常类对象的形式抛出,异常类描述异常信息、发生的位置

异常的给类为Exception。异常类一般都基础字Exception

异常的捕捉

  1. try
    {
        string s =null;//s没有指向任何对象
        s.ToLower();//调用s所指向的对象的ToLower方法
    }
    catch(NullReferenceException e)
    {
        Console.WriteLine("null引用错误:"+e.Message);
    }

还有

  1. try
    {
        //可能有问题的代码
    }
    catch(异常类型异常变量)
    {
        //处理方式
    }
    finally
    {
        //无论“有问题的代码”是否出错都要执行的代码
    }

e就是发生异常异常类对象,变量名只要不冲突就任意

把可能发生异常的代码段放到try块中

catch捕获代码段中的NullReferenceException异常

如果捕捉到了,e就代表异常对象

一旦try里面有问题了,放弃执行try代码块中的代码,直接跳到catch里面执行。

finally语句块里面的代码无论是否有异常都会执行

好的异常处理习惯

不要只是把异常catch住什么都不做或者只是打印一下,这不是正常的“异常处理”。

不知道怎么处理就不要catch,出错比“把错误藏起爱”好。这样以为“不会出错了”,其实是把异常“吃掉了”,会让程序陷入逻辑混乱状态,要科学合理的处理异常

6、File文件类

File是静态类(无法被new)中的主要方法:

void Delete(string path);删除指定文件

bool Exists(string path);判断指定文件是否存在

string[] ReadAllLines(string path);将指定的文本文件中的内容读取到string数组中

string ReadAllText(string path):将文本文件读取为一个字符串

void WriteAllLines(string path, string[] contents):将一个string[]数组写入到指定文件中;

void WriteAllText(string path, string contents):将字符串contents写入到指定文本文件path中。

AppendAllText:向文件中附加内容;

Copy复制文件;

Move移动文件

7、Directory文件夹static类

CreateDirectory(string path):创建文件夹全路径

void Delete(string path, bool recursive):删除文件夹指定path, recursive表示是否也删除子文件及子文件夹。如果文件夹不为空, recursive=false,则抛异常;

bool Exists(string path):判断指定文件夹是否存在

EnumerateFiles、 EnumerateDirectories遍历文件和文件夹;

8、流(Stream)

File类提供了读写文本文件的方法,但是对于大文件不能用它提供的方法,占内存,需要一种“流式处理”的方法。

本地的照片是怎么样上传到QQ空间服务器的呢?播放器是怎么读取硬盘上的视频文件到播放器里面的,然后显示的呢?我们编写的word文档是怎保存到硬盘中的?这些都 涉及到IO(Input/Output)操作。

.Net将IO操作(文件、网络等)简化成流模型Stream,是抽象类,网络、文件、加密等都是不同的子类,最常用胡子类是FileSteam、MemoryStream等

使用Stream的时候虽然可以:FileStream fs = new FileStream(...),但是Stream fs = new FileInputStream(...);更好,在使用的变量类型提供的操作能满足的前提下,尽可能用父类、接口声明变量;

资源关闭

资源要使用完毕才能close,一旦close之后操作就会出错

9、using

没次资源关闭都要写一大堆代码太麻烦,C#中提供了一个using语法,对于实现了IDisposable接口的对象,可以简化:

  1. public class MyFileStream:IDisposable
    {
        public void Dispose()
        {
            Console.WriteLine("Dispose了");
        }
    }

使用方法:

  1. using(MyFileStream f1 =newMyFileStream())
    {
    }

可以同时声明多个资源:

  1. using (MyFile f1 =newMyFile())
    using (MyFile f2 =newMyFile())
    {
    }
10、FileSteam读取

字节流不适合读取内容中包含文本文档,容易造成数据错乱(byte[]中含有一半的汉字)。要用StreamReader

using (FileStream fs = new FileStream(@"D:\temp\1.txt", FileMode.Open))
{

    byte[] bytes = new byte[4];
    //fs.Read(bytes, 0, bytes.Length);//每次读取4个字节,下次Read的时候再读取最多4个byte
    //返回值为真正读取的字节数
    int len;
    /*
    len = fs.Read(bytes, 0, bytes.Length);
    Console.WriteLine(len);
    len = fs.Read(bytes, 0, bytes.Length);
    Console.WriteLine(len);
    len = fs.Read(bytes, 0, bytes.Length);
    Console.WriteLine(len);
        */

    //判断是否已经读到了最后
    while ((len = fs.Read(bytes, 0, bytes.Length)) > 0)
    {
        //Console.WriteLine(len);
        //把byte数组转化为字符串
        //string s = Encoding.Default.GetString(bytes);
        string s = Encoding.Default.GetString(bytes, 0, len);
        Console.WriteLine(s);
    }

}
复制文件

使用两个FileSteam配合完成文件拷贝:从源文件的FileStream中读取一部分内容,再写入到目标文件的FileStream中。

示例代码:

using (Stream inStream = new FileStream(@"d:\temp\C#.pdf", FileMode.Open))
using(Stream outStream = new FileStream(@"d:\temp\CSharp.pdf",FileMode.Create))
{
    byte[] bytes = new byte[1024*1024];
    //缓冲区大小:过小:降低速度;过大:占用内存
    int len;
    //读取并且返回读取长度给len,然后判断len读取的长度的值是否大于0
    while ((len = inStream.Read(bytes, 0, bytes.Length)) > 0)
    {
        //将byte[]数组写入outStream中,0代表从这个数组的第几位开始写入,len代表写入多长
        //每次write都会从上次write的最后位置接着写入,
        outStream.Write(bytes, 0, len);//类似于GetString
    }
}
11、Reader、Writer

(1)直接用Stream进行文本文件的读写会比较麻烦,因为要考虑文件的编码、中文字符等的问题。

(2)StreamReader、StreamWriter是用来读写字符流(character stream)的类,会帮着自动处理麻烦的问题。

  1. using (Stream outStream = new FileStream(@"d:\temp\1.txt", FileMode.Create))
    using(StreamWriter sw = new StreamWriter(outStream,Encoding.Default))
    {
        sw.Write("你好a如鹏网");
        sw.WriteLine("hehe");
        sw.WriteLine("1111");
    }
12、泛型List

1、数组长度是固定的,List<T>可以动态增删内容。List<T>是泛型的,可以在声明的时候指定放什么类型的数据。

List<int> list = new List<int>();
list.Add(1);
list.Add(2);
list.AddRange(new int[] { 1, 2, 3, 4, 5, 6 });
list.AddRange(list);//另一个list

2、如何遍历?

for (int i = 0; i < list1.Count; i++)
{
    int num = list1[i];
    Console.WriteLine(num);
}

3、集合转为数组

  1. int[] nums = list.ToArray(); //List泛型集合可以转换为数组
    List<string> listStr = new List<string>();
    string[] str = listStr.ToArray();
13、泛型字典Dictionary
14、foreach

除了使用for遍历,实现了IEumerable接口的对象还可以使用foreach遍历

  1. int[] nums = { 33, 55, 66 };
    for (int i = 0; i < nums.Length; i++)
    {
        Console.WriteLine(nums[i]);
    }
时间: 2024-12-11 01:33:59

第五章、DotNet基本常用类库的相关文章

如鹏训练营_第五章、.NET常用类库知识总结

常用类库之.NET中的字符串 字符串的特性 1.不可变性 由于字符串是不可变的的,每次修改字符串,都是创建了一个单独字符串副本(拷贝了一个字符串副本).之所以发生改变只是因为指向了一块新的地址. 2.字符串池(只针对字符串常量) 当一个程序中有多个相同的字符串常量时,多个变量指向的是内存中同一块字符串!这个特性叫字符串池.之所以字符串,不会造成程序混乱,是因为字符串的不可变性. String的成员方法和属性 PS:这里重载方式很多,不一一列举. 1.Contains(String str)  判

第08章:java常用类库

本章主要内容: 1. API概述 2.  常用类: Object类/Scanner类 String类/StringBuffer类/StringBuilder类 数组高级和Arrays类 基本类型包装类(Integer,Charater) 正则表达式(Pattern,Matcher) Math类/Random类/System类 BigInteger类/BigDecimal类 Date类/DateFormat类/Calendar类 2:API的概述(了解) (1)应用程序编程接口. (2)就是JDK

031113_【第11章:Java常用类库】_比较器(Comparable、Comparator)

//****ComparatorDemo.java import java.util.* ;class Student{    // 指定类型为Student    private String name ;    private int age ;    public Student(String name,int age){        this.name = name ;        this.age = age ;    }    public boolean equals(Obje

第五章-css常用属性

第五章 CSS常用属性 1. span标签 突显,强调局部文字的作用. 2.字体样式 font-size: 字体大小 font-style:normal,italic(倾斜) font-weight:normal,bold(加粗) font-familty:字体类型(楷体) font:样式 粗细 字体大小 字体类型. 3.文本样式 color: 文本样式 text-align: 水平对齐方式(left,center,right) text-indent: 首行缩进 line-height: 行高

一个老师程序员说:这是学Java 必知必会的 20 种常用类库和 API

一个有经验的Java开发人员特征之一就是善于使用已有的轮子来造车.<Effective Java>的作者Joshua Bloch曾经说过:"建议使用现有的API来开发,而不是重复造轮子".在本文中,我将分享一些Java开发人员应该熟悉的最有用的和必要的库和API.顺便说一句,这里不包括框架,如Spring和Hibernate因为他们非常有名,都有特定的功能.最后,如果大家如果在自学遇到困难,想找一个java的学习环境,可以加入我们的java学习圈,点击我加入吧,会节约很多时

.NET常用类库知识总结

常用类库之.NET中的字符串 字符串的特性 1.不可变性 由于字符串是不可变的的,每次修改字符串,都是创建了一个单独字符串副本(拷贝了一个字符串副本).之所以发生改变只是因为指向了一块新的地址. 2.字符串池(只针对字符串常量) 当一个程序中有多个相同的字符串常量时,多个变量指向的是内存中同一块字符串!这个特性叫字符串池.之所以字符串,不会造成程序混乱,是因为字符串的不可变性. String的成员方法和属性 PS:这里重载方式很多,不一一列举. 1.Contains(String str)  判

第五章

第五章 搭建S3C6410开发板的测试环境 ARM构架的开发板可基于X86构架的PC 在CPU指令以及二进制格式上有所不同. 安装串口调试工具 minicon 使用OK6410开发板可以使用其他方法显示Linux驱动程序输出的调试信息.此为串口调试. OK6410开发板自带一个串口.通过串口线与PC连接,linux驱动在输出调试信息的同时,通过串口线将调试信息发送到PC上. 安装.配置和测试minicom: 1.lsmod | grep usbserial 2.apt-get install m

Java Persistence with MyBatis 3(中文版) 第五章 与Spring集成

MyBatis-Spring是MyBatis框架的子模块,用来提供与当前流行的依赖注入框架Spring的无缝集成. Spring框架是一个基于依赖注入(Dependency Injection)和面向切面编程(Aspect Oriented Programming,AOP)的Java框架,鼓励使用基于POJO的编程模型.另外,Spring提供了声明式和编程式的事务管理能力,可以很大程度上简化应用程序的数据访问层(data access layer)的实现.在本章中,我们将看到在基于Spring的

第五章 循环和关系表达式

第五章  循环和关系表达式 5.1  for循环 5.1.1  for循环的使用 For循环的组成部分完成下面4个步骤: 1)        设置初始值: 2)        执行测试,看看循环是否应当继续运行: 3)        执行循环体: 4)        更新用于测试的值. For循环的形式如下: for (init-expresstion; test-expresstion; update-expresstion) body-statement 说明: 1)        C++将