C#面向对象10_异常_正则表达式
2021-07-12 15:07
标签:支持 操作文件 需要 处理程序 导致 子类 自己的 gate 表达 异常_正则表达式 异常try…catch 在很多情况下,我们不确定程序是否能够正常运行,尤其是在需要第三方配合时,比如:用户输入、操作文件、连接数据库等等情况下,会有一些不可控的因素导致程序出现错误。因此,我们需要一种机制来处理程序的意外错误,这就是try…catch语句的应用范围了。 语法 其中: try用来尝试性的执行可能出错的代码,如果代码出错的话就会产生一个Exception异常对象,并将这个异常对象传入的catch语句中,try区域中报错之后的部分不会执行,而是直接去执行catch中代码。如果try区域中没有出错则catch部分中的代码就不会被执行。 try语句在执行的时候,性能是很低的,因此需要尽可能的避免使用try语句,通常我们只在需要第三方配合的情况下,使用try语句。 finally部分是可以省略的。 示例: Exception对象 就是C#用来存放错误信息的一个类,(e变量)包含的错误的文本信息,以及错误的类型。 手动抛出异常 它的作用就是手动制造一个错误信息,让程序中断并且(在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()来向字符串的末尾追加字符内容。 示例: 正则表达式 是一种专门用来搜索和匹配字符串的机制,它能够用一些较复杂的规则来约定你要搜索的字符串的特征和范围,类似于通配符*。正则表达式不仅仅在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 Replace()方法 替换字符串中,能够被正则表达式匹配到的部分 示例:替换文本中的电子邮件地址 电子邮件地址的正则表达式:aa550@163.com \w{2,}@\w{1,}\.\w{1,10} Split()方法 Split方法能够帮助我们将一个字符串分隔为多个部分,按照这个字符串中重复出现的字符来进行分隔。Regex.Split()支持将多个字符作为分隔符。 小练习: 定义多个字符串,其包含有正确的身份证号与错误的身份证号。要求用正则表达式来判断哪些身份证合法,哪些不合法。 判断是否为重庆地区的合法身份证号。500….共18位。 判断是否为正确的手机号。1开头 开发一个简单的正则表达式验证器,输入两个字符串,第一个是正则表达式,第二个是要验证的字符串,然后显示两者是否匹配。 局部类partial 局部类型partial允许我们将一个类、结构体或接口分成几个部分,分别存放在几个不同的.cs文件中。 它适用于以下几种情况: 类比较大,需要区分为几个文件来存放。 一个类型中的部分代码是由代码生成器自动生成的,不宜与我们的代码混合在一起。 需要多个人合作编写一个类。 因此,它只是一种工作方式,而不一个语法概念或功能。 定义方法: 在同一个命名空间中,用partial来定义分布在同一个或不同.cs文件中的同名class,则这些位于不同物理位置的类,在逻辑上属于同一个类。 示例1: 示例2: dog.cs文件中: dog1.cs文件中: dog2.cs文件中: 在Program.cs文件中: 泛型委托 就是在委托中使用泛型 泛型委托 委托可以让方法像变量一样被传递 C#面向对象10_异常_正则表达式 标签:支持 操作文件 需要 处理程序 导致 子类 自己的 gate 表达 原文地址:https://www.cnblogs.com/yigegaozhongsheng/p/9598480.htmltry{
//有可能出现错误的代码
}
catch(Exception 异常变量)
{
//对异常进行处理
}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之外的代码");
catch (FormatException e) //Exception的子类来定义错误对象
{
if(e is System.FormatException)
Console.WriteLine("您的操作有误");
//Console.WriteLine(e.GetType().ToString());
}
StringBuilder sb = new StringBuilder("这是一个字符串");
sb.Append(",说的对。");
Console.WriteLine(sb.ToString());
其他常用方法
StringBuilder.Insert(位置 , 内容)
将字符串插入到当前StringBuilder的指定位置。
StringBuilder.Remove(开始位置 , 删除长度)
从StringBuilder的指定位置开始删除指定长度个字符。
StringBuilder.Replace(原字符串 , 新字符串)
用指定字符串替换, StringBuilder中的能够匹配的原字符串。
//正则表达式
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);
//正则表达式
string RegeTest = @"\w{2,}@\w{1,}\.\w{1,10}";
//邮件地址
string msg = "我厂需要采购钢材20万砘,我们的email是 tom@gmail.com";
if (Regex.IsMatch(msg, RegeTest))
{
Console.WriteLine(Regex.Replace(msg, RegeTest, "*********"));
//第一个参数是被检测的字符串,第二个参数是正则表达式,第三参数代表替换为该字符串
}
else
Console.WriteLine("没有电子邮箱地址");
string names = "小明_A_小花_B_小红_C_小芳_D_小强";
string[] nArr = Regex.Split(names,"_\\w_");
foreach (string str in nArr)
{
Console.WriteLine(str);
}
partial class Program
{
static void Main(string[] args)
{
test();
}
}
partial class Program {
static void test() {
Console.WriteLine("这是另外一个cs文件中的局部类");
}
}
partial class dog
{
public string name { get; set; }
}
partial class dog
{
public void bark() {
Console.WriteLine("汪汪叫");
}
partial class dog
{
public void eat() {
Console.WriteLine("烤鸡翅膀,那个我最爱吃");
}
}
static void Main(string[] args)
{
dog d1 = new dog();
d1.name = "小白";
d1.bark();
d1.eat();
}
public delegate T delTest
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);
}
}
文章标题:C#面向对象10_异常_正则表达式
文章链接:http://soscw.com/index.php/essay/104215.html