.Net学习笔记7-.Net基础2 常用类库

1.String类库
String成员方法:
1).Contains、StartsWith、EndsWith
bool Contains(String str):判断字符串对象是否包含给定的字符串。
bool StartsWith(String str):判断字符串对象是否以给定的字符串开始。
bool EndsWith(String str):判断字符串对象是否以给定的字符串结束。
string str = "Hello";
            Console.WriteLine(str.Contains("l"));//true
            Console.WriteLine(str.Contains("a"));//false
            Console.WriteLine(str.StartsWith("he"));//false
            Console.WriteLine(str.StartsWith("He"));//true
            Console.WriteLine(str.EndsWith("lo"));//true
            Console.WriteLine(str.EndsWith("Lo"));//false

2).Length、IndexOf、LastIndexOf、Substring
int Length:获取字符串的长度属性
char ch = s[3];
int IndexOf(char ch):返回指定字符在此字符串中第一次出现的索引
int IndexOf(String str):返回指定字符串在此字符串中第一次出现的索引
LastIndexOf:最后一次出现的位置。
String Substring(int start):截取字符串。返回从指定位置开始截取后的字符串。
String substring(int start,int length)截取字符串。返回从指定位置开始截取指定长度length的字符串。

string s1 = "hellooabcdaabe";
int i = s1.IndexOf('l');
Console.WriteLine(i);
Console.WriteLine(s1.IndexOf("ab"));
Console.WriteLine(s1.LastIndexOf('l'));

string s2 = s1.Substring(4);
Console.WriteLine(s2);
Console.WriteLine(s1.Substring(4,3));

案例获取一个文件名的名称和扩展名部分:
string filename = "[ADS-118]林志aaaaaa玲.avi";//
int dotIndex = filename.IndexOf('.');//3
string name = filename.Substring(0, dotIndex);
Console.WriteLine(name);
string ext = filename.Substring(dotIndex + 1);
Console.WriteLine(ext);

3)字符串对象内容是不可改变的
.ToLower()、ToUpper()、Replace()、trim()、Split()
String ToLower():把字符串变成小写;String ToUpper():把字符串变成大写
String Replace(char oldChar,char newChar):用新的字符去替换指定的旧字符;
String Replace(String oldStr,String newStr):用新的字符串去替换指定的旧字符串
String trim():去除字符串两端空格, Trim(params char[] trimChars)去掉两端的给定字符。 
TrimEnd:去掉结尾的空格  TrimStart:去掉开头的空格
String是不可变的,因此上面的操作都是生成新的字符串对象,要用返回值去取新的字符串。
字符串对象一旦声明对象内容,是不可改变的。字符串对象是只读的
String[] Split(...):重载方法很多,字符串按照分隔符切割成字符串数组。
案例:把字符串用“,”分割
string s2 = "a,b,c,|,1,2,1|1";
sstring[] s2_1 = s2.Split(',','|');
            string[] s2_2 = s2.Split(new char[] { ',', '|' },StringSplitOptions.RemoveEmptyEntries);
//StringSplitOptions.RemoveEmptyEntries:去除空字符串的数组元素
            for (int i = 0; i < s2_1.Length; i++)
            {
                Console.Write('['+s2_1[i]+"]   ");
            }
            Console.WriteLine();
            for (int i = 0; i < s2_2.Length; i++)
            {
                Console.Write('['+s2_2[i]+"]   ");
            }
输出结果:[a]   [b]   [c]   []    []   [1]   [2]   [1]   [1]
 [a]   [b]   [c]   [1]   [2]   [1]   [1]
 
4)String的静态方法  直接通过类来调用
判断字符串是否为null或者是空字符串:
     String.IsNullOrEmpty(string value)
不区分大小写比较。案例:验证码
     String.Equals(string a, string b, StringComparison. OrdinalIgnoreCase)
把一个数组(集合)用分隔符separator连接为一个字符串。
String.Join(string separator, params string[] value)

string s1 = null;//s1未指向任何字符串对象
string s2 = "";//s2指向长度为0的空字符串对象  空字符串
string s3=" ";//s3指向长度为1的空字符串对象
-------
string s1 = null;//s1未指向任何字符串对象
            string s2 = "";//s2指向长度为0的字符串对象  空字符串
            Console.WriteLine(string.IsNullOrEmpty(s1));//true
            string s3 = "aab";
            string s4 = "Aab";
            Console.WriteLine(string.Equals(s3,s4));//判断字符串是否完全一样 false
            Console.WriteLine(string.Equals(s3,s4,StringComparison.OrdinalIgnoreCase));//true 不区分大小写
            int[] nums = { 1, 2, 3, 4, 5 };
            string num = string.Join(",", nums);
            Console.WriteLine(num);//1,2,3,4,5
5)StringBuilder
1、使用反编译发现
String s7="111"+"222"+"333"+"444"+"555"  
会被优化为  String s7 = "111222333444555";
但是String s6 = s1 + s2 + s3 + s4 + s5;就没那么幸运了,每次+都会生成一个String对象,
当连接字符串比较多的时候就会产生临时字符串对象。
2、使用StringBuilder拼接字符串则不会有临时字符串对象的问题:
StringBuilder sb = new StringBuilder();
sb.Append(s1);
sb.Append(s2);
sb.Append(s3);
因为Append方法把this返回了,还可以sb.Append(s1).Append(s2).Append(s3);
最后使用String s = sb.ToString()一次性生成拼接结果字符串即可
class Program
{
static void Main(string[] args)
{
/*
string s1 = "aaa" +
+"aaaaa"+"bbb";
Console.WriteLine(s1);
*/
string s1 = "aaa";
string s2 = "bbb";
string s3 = "ccc";
string s4 = "ddd";
string s5 = "afadsf";
string s6 = s1 + s2 + s3 + s4 + s5;

StringBuilder sb = new StringBuilder();
/*
sb.Append(s1);
sb.Append(s2);
sb.Append(s3);
sb.Append(s4);
sb.Append(s5);
sb.Append(33);*/
  sb.Append(s1).Append(s2).Append(s3).Append(s4).Append(s5);
  sb.AppendLine("hello");
  sb.AppendLine("afasdfads");

string s7 = sb.ToString();
Console.WriteLine(s7);

Person p1 = new Person();
p1.Eat().Sleep().Dota();//链式编程 Jquery
Console.ReadKey();
}
}
class Person
{
public Person Eat()
{
Console.WriteLine("吃饭");
return this;
}
public Person Sleep()
{
Console.WriteLine("睡觉");
return this;
}
public Person Dota()
{
Console.WriteLine("打Dota");
return this;
}
}

6)可空int(值类型)
int等是值类型,不能为null。有时想表达“不知道数字是多少”的时候,用int任何值表示都不合适。
C#中可以用“int?”表示“可空的int”。注意类型转换:
int? i1=5;
if(i1!=null)
{
int i= (int)i1;
}
也可以通过i1.HasValue判断是否为null、i1.Value来获得值。
int? i = null;
int? i2 = 3;
if (i == null)
{
Console.WriteLine("i为null");
}
if (i2 != null)//i2.HasValue
{
//i2++;
i2 = i2 + 3;
//int i3 = i2;//把可能为null的int?赋值给一定不为null的int
int i3 = (int)i2;//i2.Value
Console.WriteLine(i2);
}
long? l = null;
练习:把阿拉伯数字转换为中文金额数字:123→壹佰贰拾三圆
static void ZHuan(int num)
        {
            string[] nums = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
            string[] wei = { "", "", "拾", "佰", "仟", "萬", "拾", "佰", "仟", "亿", "拾", "佰", "仟", };
            if (num < 0)
            {
                throw new Exception("num不能为负数!");
            }
            string num1 = Convert.ToString(num);
            int len = num1.Length;
            string tmps, sb;
            sb = "";
            int i;
            for ( i= 1; i <= len; i++)
            {
                tmps = num1.Substring(len - i, 1);
                //sb = nums[Int32.Parse(tmps)] + wei[i] + sb;
                sb= string.Concat(nums[Int32.Parse(tmps)] + wei[i], sb);
            }
            sb= sb.Replace("零拾", "零").Replace("零佰", "零").Replace("零仟", "零");
            for (i = 1; i <= 6; i++)
            {
                sb = sb.Replace("零零", "零");
            }
            sb=sb.Replace("零萬", "萬").Replace("零億", "億").Replace("零零", "零");
            sb += "圆整";
            sb = sb.Replace("零圆", "圆");
            Console.WriteLine(sb);

        }
2.异常(Exception)
*异常发生在程序发生的不正常情况下。异常以一个异常类对象的形式抛出,异常类描述异常信息、发生的位置等。
*异常的根类为Exception。异常类一般都继承自Exception
*自定义异常类
class MyException:Exception
{
public MyException(string msg) : base(msg) { }
}
throw new MyException("自定义异常信息");
*抛出异常:
“System.NullReferenceException”类型的未经处理的异常在 ExceptionTest.exe 中发生 
      其他信息: 未将对象引用设置到对象的实例。
*异常捕获:
try
{
Console.WriteLine("ToString()开始");
String s = null;//s1没有指向任何对象
s.ToString();//调用s所指向的对象的ToString方法
//一旦try代码块中发生异常,则代码块中异常点之后的代码就不会执行了
Console.WriteLine("ToString()结束");
}
catch (NullReferenceException ex)
{
//把可能发生异常的代码放到try代码块中
//catch捕获代码段中的NullRefernenceException异常
//如果捕捉到了,e就代表异常对象
Console.WriteLine("为空"+ex.Message);
*e就是发生异常的异常类对象,变量名只要不冲突就任意。
*在异常处理中,一旦try里面有问题了。放弃try代码块中之后的代码,直接跳到catch里面执行。如果try代码后还有代码,则处理完catch后还会继续执行。

*多个异常的处理
try
{
int a = 10;
int b = 0;
Console.WriteLine(a / b);
int[] arr = { 1, 2, 3 };
Console.WriteLine(arr[3]);
}
catch (DivideByZeroException ae)
{
Console.WriteLine("除数不能为0");
}
catch (IndexOutOfRangeException ae)
{
Console.WriteLine("数组越界异常");
}
可以catch住父类异常,这样就可以抓住所有子类异常了,但是强烈不建议大家这样做,特别是不要没理由的catch(Exception ex)
 好的异常处理习惯:
不要只是把异常catch住什么都不做或者只是打印一下,这不是正常的“异常处理”。

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

要科学合理的处理异常(以后经常用就明白了)。

try
{
//有可能有问题代码
}
catch(异常类型 异常变量)
{
//处理方式
}
finally
{
//无论“有可能有问题代码”是否出错都要执行的代码
}
*finally中一般进行资源的回收等
*注意:在vs调试的情况下,finally的执行可能看不到,因为vs会把异常抛出阻断代码执行,如果想验证是否都会进入finall,可以按CTRL+F5执行程序。
*可以try{}catch(){},try{}catch(){}finally{},try{}finally{}








.NET Framework 4.0 常用类库参考手册 [微软官方 MSDN] MSDN Library - .NET Framework 4.0 - 命名空间 (节选版) 制作成了chm格式,方便离线状态下学习! ======================================= 原文地址:http://msdn.microsoft.com/zh-cn/library/ms229335.aspx ======================================= .NET Framework 类库 - 命名空间 (节选版) Microsoft.Win32 提供两种类型的类:处理由操作系统引发的事件的类和对系统注册表进行操作的类。 System 包含用于定义常用值和引用数据类型、事件和事件处理程序、接口、特性和处理异常的基础类和基类。其他类提供支持下列操作的服务:数据类型转换,方法参数操作,数学计算,远程和本地程序调用,应用程序环境管理以及对托管和非托管应用程序的监管。 System.Collections 包含定义各种对象集合(如列表、队列、位数组、哈希表和字典)的接口和类。 System.Data 包含组成大部分 ADO.NET 结构的类。ADO.NET 结构使您可以生成可用于有效管理来自多个数据源的数据的组件。 System.Data.Common 包含由 .NET Framework 数据提供程序共享的类。.NET Framework 数据提供程序描述用于在托管空间中访问数据源(如数据库)的类的集合。 System.Data.Linq 包含支持在 LINQ to SQL 应用程序中与关系数据库进行交互的类。 System.Data.Linq.Mapping 包含用于生成表示关系数据库的结构和内容的 LINQ to SQL 对象模型的类。 System.Data.Mapping 提供用于存储数据映射信息的类型。 System.Data.Metadata.Edm 包含一组类型,这些类型表示模型中由实体框架使用的概念,以及一组帮助应用程序使用元数据的类。 System.Data.Objects 包含可访问对象服务的核心功能的类。 System.Data.Objects.DataClasses 包含以下这些类:Entity Data Model (EDM) 中定义的类型的基类、由导航属性返回的类型的基类,以及用于定义将公共语言运行时 (CLR) 对象映射到概念模型中类型的特性的类。 System.Data.Sql 包含支持特定于 SQL Server 的功能的类。此类的 API 扩展已添加到 SQL Server 的 .NET Framework 数据提供程序 ( System.Data.SqlClient) 中。 System.Data.SqlClient 包含封装 SQL Server .NET Framework 数据提供程序的类。SQL Server .NET Framework 数据提供程序描述了用于在托管空间中访问 SQL Server 数据库的类集合。 System.IO 包含允许对数据流和文件进行同步和异步读写的类型。 System.Linq 包含支持使用语言集成查询 (LINQ) 的查询的类和接口。 System.Web 提供启用浏览器/服务器通信的类和接口。 ……
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值