C#面向对象10_异常_正则表达式

异常_正则表达式

异常try…catch

在很多情况下,我们不确定程序是否能够正常运行,尤其是在需要第三方配合时,比如:用户输入、操作文件、连接数据库等等情况下,会有一些不可控的因素导致程序出现错误。因此,我们需要一种机制来处理程序的意外错误,这就是try…catch语句的应用范围了。

语法

try{

//有可能出现错误的代码

}

catch(Exception 异常变量)

{

//对异常进行处理

}finally

{

//无论是否出现异常都会被执行的代码

}

其中:

try用来尝试性的执行可能出错的代码,如果代码出错的话就会产生一个Exception异常对象,并将这个异常对象传入的catch语句中,try区域中报错之后的部分不会执行,而是直接去执行catch中代码。如果try区域中没有出错则catch部分中的代码就不会被执行。

try语句在执行的时候,性能是很低的,因此需要尽可能的避免使用try语句,通常我们只在需要第三方配合的情况下,使用try语句。

finally部分是可以省略的。

示例:

try

{

Console.WriteLine("请输入数字");

string sNum = Console.ReadLine();

float fNum = float.Parse(sNum);

Console.WriteLine("已成功转换为数值");

}

catch (Exception e)

{

Console.WriteLine("您的操作有误");

Console.WriteLine(e.ToString());

}

finally {

Console.WriteLine("操作完毕");

}

Console.WriteLine("最后try之外的代码");

Exception对象

就是C#用来存放错误信息的一个类,(e变量)包含的错误的文本信息,以及错误的类型。

catch (FormatException e) //Exception的子类来定义错误对象

{

if(e is System.FormatException)

Console.WriteLine("您的操作有误");

//Console.WriteLine(e.GetType().ToString());

}

手动抛出异常

它的作用就是手动制造一个错误信息,让程序中断并且(在try语句中不会中断)报错。比如:有时需要提醒其他程序员,这个代码有需要修改的地方。

语法:

throw异常对象;

示例:

throw new Exception();

throw new NotImplementedException();

FormatException e = new FormatException();

throw e;

 string与stringBuilder类

string与stringBuilder都是用来存放字符串的类型,要想了这两者的区别,首先要明白栈内存、堆内存和string的特征。

string的特征之一:当我们修改字符串的时候,并不是在真正的修改字符串的原值,而是在堆内存中开辟了一个新的空间,并在其中创建了一个新的字符串,然后将栈内存中的变量名指向了新的字符串所在的地址。

正是因为string的这个特征,所以字符串在需要频繁修改时性能会比较差。

因此,我们需要使用另外一种工具:stringBuilder来解决这个问题。当我们对stringBuilder进行修改时,修改的就是堆内存中的原值。

定义语法:

StringBuilder 变量名 = new StringBuilder();

StringBuilder 变量名 = new StringBuilder(“字符串”);

它的赋值过程与string不同,不能直接将双引号中的字符串直接赋值给stringBuilder的实例对象。

追加字符串:

StringBuilder不像string类型,不能用+加法运算符来追加字符串,而是必须用Append()来向字符串的末尾追加字符内容。

示例:

StringBuilder sb = new StringBuilder("这是一个字符串");

sb.Append(",说的对。");

Console.WriteLine(sb.ToString());

其他常用方法

StringBuilder.Insert(位置 , 内容)

将字符串插入到当前StringBuilder的指定位置。

StringBuilder.Remove(开始位置 , 删除长度)

从StringBuilder的指定位置开始删除指定长度个字符。

StringBuilder.Replace(原字符串 , 新字符串)

用指定字符串替换, StringBuilder中的能够匹配的原字符串。

正则表达式

是一种专门用来搜索和匹配字符串的机制,它能够用一些较复杂的规则来约定你要搜索的字符串的特征和范围,类似于通配符*。正则表达式不仅仅在C#中有效,它同样可以在javascript、jquery、php、java等等语言中有效。

基本语法

正则表达式它拥有一套自己的语法规则,常见的语法包括:字符匹配、字符定位、转义匹配等等。


字符格式


语法解释


示例


\d


匹配数字(0~9)


\d匹配8,不匹配12


\D


匹配非数字


\D匹配c,不匹配3


\w


匹配任意单字符(字母或数字)


\w\w匹配A3,不匹配@3


\W


匹配非单字符


\W匹配@,不匹配c


\s


匹配空白字符


\d\s\d匹配3 8,不匹配123


\S


匹配非空字符


\S\S\S匹配A#4,不匹配3 d


.


匹配任意字符


....匹配A$ 5,不匹配换行


[…]


匹配方括号中任意字符


[b-d]匹配b、c、d,不匹配e


[^…]


匹配非括号中的字符。


[^b-d]匹配e、a,不能匹配b、c、d

重复匹配语法


格式


语法解释


示例


{n}


匹配n次字符


\d{3}匹配\d\d\d,不匹配\d\d或\d\d\d\d


{n,}


匹配n次或n次以上


\w{2,} 匹配\w\w或\w\w\w以上,不匹配\w


{n,m}


匹配n次以上m次以下


\s{1,3}匹配\s或\s\s或\s\s\s,不匹配\s\s\s\s


?


匹配0或1次


5?匹配5或0,不匹配非5非0


+


匹配一次或多次


\S匹配一个或更多\S


*


匹配0次以上


\W*匹配0以上\W

字符定位语法


格式


语法解释


^


定位后面模式的开始位置,就是从什么位置开始进行判断


$


前面的规则位于字符串末端


\A


前面规则的开始位置


\z


前面规则的结束位置


\Z


前面规则的结束位置(换行前)


\b


匹配一个单词的边界


\B


匹配一个非单词的边界

转义匹配语法:


格式


语法解释


\n


换行


\r


回车


\t


制表符


\v


垂直制表符


\f


换页


\c+大写字母


匹配Ctrl-大写字母,比如:\c5-匹配Ctrl + 5


“\”+实际字符


范围是 \ . * + ? | () {} ^ $ ,例如:\\匹配 \

因为这些字符已经有意义了,所以我们需要用转义字符才能使用它。

在C#中使用正则表达式

需要用Regex类(隶属于System.Text.RegularExpressions命名空间),它就是用来构造和使用正则表达式的类,其常用的类成员包括:IsMatch()、Replace()、Splite()和Match类。

IsMatch()方法

该方法用于测试一个字符串是否满足指定的正则表达式,返回bool值,满足则返回true,否则返回false 。

示例:匹配一个字符串是否是重庆地区的座机号码

正则表达式:023\d{8}\z

//正则表达式

string RegeTest = @"023\d{8}\z";

//两个测试电话号码

string testPhone = "01089562341";

string testPhone2 = "02381818181";

//第一个参数是被检测的字符串,第二个参数是正则表达式

bool isCQ = Regex.IsMatch(testPhone, RegeTest);

Console.WriteLine("第一个是否为重庆座机号:"+isCQ);

isCQ = Regex.IsMatch(testPhone2, RegeTest);

Console.WriteLine("第二个是否为重庆座机号:" + isCQ);

Replace()方法

替换字符串中,能够被正则表达式匹配到的部分

示例:替换文本中的电子邮件地址

电子邮件地址的正则表达式:[email protected] \w{2,}@\w{1,}\.\w{1,10}

//正则表达式

string RegeTest = @"\w{2,}@\w{1,}\.\w{1,10}";

//邮件地址

string msg = "我厂需要采购钢材20万砘,我们的email是 [email protected]";

if (Regex.IsMatch(msg, RegeTest))

{

Console.WriteLine(Regex.Replace(msg, RegeTest, "*********"));

//第一个参数是被检测的字符串,第二个参数是正则表达式,第三参数代表替换为该字符串

}

else

Console.WriteLine("没有电子邮箱地址");

Split()方法

Split方法能够帮助我们将一个字符串分隔为多个部分,按照这个字符串中重复出现的字符来进行分隔。Regex.Split()支持将多个字符作为分隔符。

string names = "小明_A_小花_B_小红_C_小芳_D_小强";

string[] nArr = Regex.Split(names,"_\\w_");

foreach (string str in nArr)

{

Console.WriteLine(str);

}

小练习:

定义多个字符串,其包含有正确的身份证号与错误的身份证号。要求用正则表达式来判断哪些身份证合法,哪些不合法。

判断是否为重庆地区的合法身份证号。500….共18位。

判断是否为正确的手机号。1开头

开发一个简单的正则表达式验证器,输入两个字符串,第一个是正则表达式,第二个是要验证的字符串,然后显示两者是否匹配。

局部类partial

局部类型partial允许我们将一个类、结构体或接口分成几个部分,分别存放在几个不同的.cs文件中。

它适用于以下几种情况:

类比较大,需要区分为几个文件来存放。

一个类型中的部分代码是由代码生成器自动生成的,不宜与我们的代码混合在一起。

需要多个人合作编写一个类。

因此,它只是一种工作方式,而不一个语法概念或功能。

定义方法:

在同一个命名空间中,用partial来定义分布在同一个或不同.cs文件中的同名class,则这些位于不同物理位置的类,在逻辑上属于同一个类。

示例1:

partial class Program

{

static void Main(string[] args)

{

test();

}

}

partial class Program {

static void test() { 

Console.WriteLine("这是另外一个cs文件中的局部类");

}

}

示例2:

dog.cs文件中:

partial class dog

{

public string name { get; set; }

}

dog1.cs文件中:

partial class dog

{

public void bark() {

Console.WriteLine("汪汪叫");

}

dog2.cs文件中:

partial class dog

{

public void eat() {

Console.WriteLine("烤鸡翅膀,那个我最爱吃");

}

}

在Program.cs文件中:

static void Main(string[] args)

{

dog d1 = new dog();

d1.name = "小白";

d1.bark();

d1.eat();

}

泛型委托

就是在委托中使用泛型

泛型委托

public delegate T delTest<T>(T i);

static void Main(string[] args)

{

Program p = new Program();

delTest<string> dt1 = new delTest<string>(p.showS);

dt1("ssss");

delTest<float> dt2 = new delTest<float>(p.showF);

dt2(3.14f);

}

public string showS(string s1)

{

Console.WriteLine("ShowSS正在被执行");

return s1;

}

public float showF(float f1)

{

Console.WriteLine("ShowFF正在被执行");

return f1;

}

委托可以让方法像变量一样被传递

partial class Program
{

static void Main(string[] args)

{

//包含可以执行方法的委托实例

Test.delTest del1 = new Test.delTest(showInt);

Test t1 = new Test(del1,11);

}

static void showInt(int i) {

Console.WriteLine(i+100);

}

}

class Test {

public delegate void delTest(int i);

//用委托类型来定义构造函数的传入参数

//应用这里的more就用于接收一个包含了方法的委托实例。

public Test(delTest more, int i) {

more(i);

}
}

原文地址:https://www.cnblogs.com/yigegaozhongsheng/p/9598480.html

时间: 2024-10-12 22:43:04

C#面向对象10_异常_正则表达式的相关文章

[.net 面向对象程序设计进阶] (2) 正则表达式(一)

[.net 面向对象程序设计进阶] (2) 正则表达式(一) 1.什么是正则表达式? 1.1正则表达式概念 正则表达式,又称正则表示法,英文名:Regular Expression(简写为regex.regexp或RE),是计算机科学的一个重要概念.他是用一种数学算法来解决计算机程序中的文本检索.区配等问题. 1.2正则表达式语言支持  正则表达式其实与语言无关,在很多语言中都提供了支持 ,包括最常用的脚本语言Javascript.当然C#语言也毫不例外的提供了很好的支持.     正则表达式语

python进阶十_正则表达式(一)

最近状态一直不太好,至于原因,怎么说呢,不好说,总之就是纠结中覆盖着纠结,心思完全不在点上,希望可以借助Python的学习以及博客的撰写来调整回来,有的时候回头想一想,如果真的是我自己的问题呢,以前我经常跟别人说,千万不要怀疑自己,因为很清楚一旦连自己都变的不可信,那这个世界就太疯狂了,当一遍一遍的问我,现在连我自己都快怀疑自己了,我一遍一遍的说服别人,想不到现在竟然需要自己去说服自己,何其的悲哀~ 一.正则表达式基础 1.基本概念 正则表达式是计算机科学的一个概念.正则表达式使用单个字符串来描

[.net 面向对象程序设计进阶] (2) 正则表达式 (二)

[.net 面向对象程序设计进阶] (2) 正则表达式 (二) 上一节我们说到了C#使用正则表达式的几种方法(Replace,Match,Matches,IsMatch,Split等),还有正则表达式的几种元字符及其应用实例,这些都是学习正则表达式的基础.本节,我们继续深入学习表达式的几种复杂的用法. 1.分组 用小括号来指定子表达式(也叫做分组) 我们通过前一节的学习,知道了重复单个字符,只需要在字符后面加上限定符就可以了, 比如 a{5},如果要重复多个字符,就要使用小括号分组,然后在后面加

Java 正则表达式详解_正则表达式

body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI",Tahoma,Helvetica,Sans-Serif,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLiU,serif; font-size: 10.5pt; line-height: 1.5;}

[.net 面向对象程序设计进阶] (4) 正则表达式 (三) 表达式助手

[.net 面向对象程序设计进阶] (2) 正则表达式(三) 表达式助手 上面两节对正则表达式的使用及.NET下使用正则表达式作了详细说明,本节主要搜集整理了常用的正则表达式提供参考. 此外为了使用方便,编写了一个<正则表达式助手>方便测试正则表达式. 1.正则表达式助手 1.1 软件概述 软件名称: <正则表达式助手> 版本: 1.0 最后更新日期: 2015/07/01 作者: YuBinfeng 运行环境: .NET Framework 4.6及以上(常用表达式功能,需要联网

面向对象(异常概述)

/** * Created by rabbit on 2014-08-05. * 异常:就是程序在运行时出现不正常情况 * 异常由来:问题也是现实生活中一个具体的事物,也可以 * 通过java的类形式进行描述,并封装成对象.其实就是 * java对不正常情况进行描述后的对象体现. * * 对于问题的划分,一种是严重的问题,一种是非严重的问题. * * 对于严重的,java通过Error类进行描述 * 对于Error一般不编写针对性的代码对其进行处理 * * 对于非严重的,java通过Except

03-04面向对象设计原则_设计实验

设计实验 有 3 个开关:a b c 有 3 个电灯:x y z 要求实现: a 能控制 x b 能控制 x, y c 能 x 注意:1个灯泡可以被多个开关控制:1个开关可以同时控制多个灯泡 所谓"控制":当开关操作时,当前灯泡的状态发生翻转.亮->灭 或 灭->亮 import java.util.*; class Light { private boolean state; // 灯的状态.true: 亮 public String toString() { if(st

java面向对象(异常)

1. 异常:就是程序在运行时出现不正常情况 异常由来:问题也是现实生活中一个具体的事物,也可以通过java的类形式进行描述.并封装成对象.其实就是  java对不正常情况进行描述后的对象体现. 对于严重的,java通过error类进行描述 对于error一般不编写针对性的代码对其进行处理 对于非严重的,java通过exception类进行描述. 对于exception可以使用针对性的处理方式进行处理 无论Error或者Exception都具有一些共性内容.比如:不正常情况的信息,引发原因等. 异

Java面向对象之异常详解

目录 Java面向对象之异常[一] Java面向对象之异常[二] 捕获异常的规则 访问异常信息 异常对方法重写的影响 finally详解 Java面向对象之异常[一] Java面向对象之异常[二] 往期回顾:上一篇我们大致总结了异常的继承体系,说明了Exception和Error两个大类都继承于顶级父类Throwable,又谈到编译时异常与运行时异常的区别,谈到异常的处理方式,以及处理方式中关于捕获方式的几种类型. 本篇承上启下,将从异常的其余部分进行总结,但是毕竟现在处于初学阶段,未必能够体会