这节课学到了应用很广泛的正则表达式,它在C#中同样起到了很好的通配作用,下面来看个例子。
我们先创造了一个正则实例,然后用它处理了一个字符串,AppendFormt是处理复合格式字符串的方法,返回的字符串追加到此实例。
这是一个匹配的字符串,并且返回字符串长度。体现了正则表达式的基本作用。查了些资料,了解了正则表达式的一些相关知识:
在C#中new一个Regex对象的时候,第二个参数能够用枚举支持选择匹配模式,现在就来说说这些枚举值对正则的影响。
模式 说明
.SingleLine 点号能够匹配任何字符
.Multiline 扩展^和$的匹配,使^和$能够匹配字符串内部的换行符
.IgnorePatternWhitespace 设计宽松排列和注释模式
.IgnoreCase 进行不区分大小写的匹配
.ECMAScript 限制\w \s \d,令其只对ASCII字符有效
.RightToLeft 传动装置的驱动过程不变,但是方向相反(从字符的末尾开始,向开头移动)
.Compiled 多花些时间优化正则表达式,编译到dll里,占用多点内存,但是匹配更快。
.ExplicitCapture 普通括号()在正常情况下是捕获型括号,但是在此模式下与(?:...)一样,之分组,不捕获
Regex有两种方法Match(),Matches()其中Match()方法中有个Groups能包含所有Match找到的Group。
string string1 = "04:03:27 127.0.0.0 LibertyAssociates.com " +
"04:03:28 127.0.0.0 foo.com " + “04:03:29 127.0.0.0 bar.com ";
// group time = one or more digits or colons followed by space
// group ip address = one or more digits or dots followed by space
// group site = one or more characters, \S:any none space characters
Regex theReg = new Regex(@"(?<time>(\d|\:)+)\s"
[email protected]"(?<ip>(\d|\.)+)\s" + @"(?<site>\S+)");
// get the collection of matches
MatchCollection theMatches = theReg.Matches(string1);
foreach (Match theMatch in theMatches)
{// iterate through the collection
if (theMatch.Length != 0)
{
Console.WriteLine("\ntheMatch: {0}", theMatch.ToString());
Console.WriteLine("time: {0}“, theMatch.Groups["time"]);
Console.WriteLine("ip: {0}“, theMatch.Groups["ip"]);
Console.WriteLine("site: {0}“, theMatch.Groups["site"]);
}
}
用这种方法可以将字符串的各个部分划归出来,解决了有时需要同时导入多个信息的问题。
接下来让我们探讨下运用windows 异步API的问题,这里我们要用到两个关键字:async ,await
public async Task<int> ExampleMethodAsync()
{
var httpClient = new HttpClient();
int exampleInt = (await
httpClient.GetStringAsync("http://msdn.microsoft.com")).Length;
ResultsTextBox.Text += "Preparing to finish ExampleMethodAsync.\n";
return exampleInt;
}
这里使用的await关键字,代表调用异步接口并等待返回结果后才执行后面的代码。这个函数在定义时用了一个关键字:async,这是因为在此函数中至少有一个地方用了await关键字,那么这个函数就必须定义为async。在外面调用这个函数的时候也就可以用await关键字了,例如:
bool result = await ExampleMethodAsync();
同样的,上面这行代码所在的函数,也必须声明async关键字。其实调用异步API的时候,也可以不用写这两个关键字,但是代码的执行顺序会发生变化,返回结果类型也变了。
今天还要跟大家介绍一点关于数据类型转换的东西:int.parse(),int.Tryparse()和Convert.ToInt32().它们的作用相似,却有着很大的差别。Convert.ToInt32 适合将object类类型转换成int类型,如Convert.ToInt32(session["shuzi"]); int.Parse适合将string类类型转换成int类型,如int.Parse(session["shuzi"].ToString()),
int.TryParse(input, out i)
第一个参数为要转化的值,第二个参数为输出值,如果转换失败,输出值为 0,如果转换成功,输出值为转换后的int值
关于int.TryParse(input, out i),该表达式转换成功返回 true,转换失败返回 false。
针对于浮点型的取舍问题,浮点型只有Convert.ToInt32()和(int)能进行转换,但是也是进行取舍了 的,Convert.ToInt32()采取的取舍是进行四舍五入,而(int)则是截取浮点型的整数部分,忽略小数部分,例如 Convert.ToInt32(1.499d)和(int)1.499d都返回1,Convert.ToInt32(1.5d)返回2,而 (int)1.5d还是返回1;
Convert.ToInt32(double value) 如果 value 为两个整数中间的数字,则返回二者中的偶数;即 3.5转换为4,4.5 转换为 4,而 5.5 转换为 6。 不过4.6可以转换为5,4.4转换为4
一点小小的学习心得,有嘛错误请大家指正。。