.NET框架类览胜(下篇)
一、处理字符串
.NET 框架类(或System类)提供了大量可在构造.NET应用时使用的核心功能,这些功能适用于任何语言环境。本文的第一部分介绍了程序集、名称空间等基本概念以及System.Math和System.Random类。这是本文的第二部分,接着讨论其他几个很有用的类:System.String,System.Array,System.DateTime。
值得指出的是,正如本文前面所提到的,当我们用VB.NET作为编程语言时,我们常常面临这样一种选择:是使用VB.NET语言内建的功能,还是使用等价的System类功能。在处理数组、日期/时间、字符串数据时,我们就面临这种选择。如果你曾经是一个VB 6.0程序员,你的第一个选择可能会是经过检验的、确实有效的老方法。但是,如果有可能,你最好还是改掉老习惯、采用新的.NET System类。为什么呢?因为采用System类能够使你的代码更容易移植到其他.NET语言以及未来的VB.NET版本。
System.String类提供了丰富的字符串处理能力。使用System.String类,我们可以:确定字符串的长度,查找子串,改变字符串的大小写,比较两个字符串,分割字符串,等等。
确定字符串长度使用的是Length属性。例如,在下面的代码中,intLength的值将是4:
Dim strColor As String = "blue"
Dim intLength As Integer
intLength = strColor.length
我们用IndexOf方法从字符串找出第一个匹配的子串。如果能够找到子串,IndexOf方法返回子串的开始位置(第一个字符的开始位置为0);如果不能找到,则IndexOf返回-1。IndexOf的查找是大小写敏感的。IndexOf是一个被重载(Overload)的方法,它允许传入的参数包括:Char类型的字符,String类型的字符串,Char类型的字符数组。下面这个IndexOf.aspx页面示范了三种不同参数类型IndexOf方法的运用:
<%@ Page Language="vb" Explicit="True"%>
<head>
<title>System.String实例</title>
<s cript language="vb" runat="server">
Sub Page_Load(Src as Object, E as EventArgs)
Dim chrG As Char = "G"
Dim strWord As String = "for"
Dim chrVowels As Char() = {"a","e","i","o","u"}
Dim strPhrase As String = _
"One small step for man, one giant leap for mankind."
Dim i As Integer
lblOutput.Text &= "<br />strPhrase = " & strPhrase
lblOutput.Text &= "<br />Position of chrG = " _
& strPhrase.IndexOf(chrG)
lblOutput.Text &= "<br />Position of strWord = " _
& strPhrase.IndexOf(strWord)
lblOutput.Text &= "<br />Position of chrVowels = " _
& strPhrase.IndexOf(chrVowels)
End Sub
</s cript>
</head>
<body>
<asp:label id="lblOutput" runat="server" />
</body>
</html>
这个页面的运行结果如下:
IndexOf允许指定两个用来限制搜索的可选参数,它们分别代表搜索字符串的起始和结束位置。例如,下面的代码对chrVowels的搜索限制在第10到20个字符之间:
strPhrase.IndexOf(chrVowels, 10, 20)
LastIndexOf方法类似于IndexOf方法,但它搜索的是子串的最后一次出现。例如,如果你修改IndexOf.aspx页面,用LastIndexOf方法来取代IndexOf方法,则strWord的位置将是39而不是15。
使用System.String的ToUpper和ToLower方法可以把字符串分别改成全部大写或者全部小写。例如:
strUpper = "This is a mixed case sentence".ToUpper()
strLower = "This is a mixed case sentence".ToLower()
从这个例子可以看出,System.String的属性和方法既可以在字符串变量中应用,也可以直接在字符串文本中应用。
你可以用Compare方法比较两个字符串是否相同。如果两个字符串相同,Compare方法返回0;如果第一个字符串小于第二个字符串,Compare返回一个负数;如果第一个字符串大于第二个字符串,Compare方法返回一个正数。Compare是一个静态方法(参见本文前面关于静态方法和实例方法的说明)。默认情况下,Compare对字符串的比较是大小写敏感的,且不考虑地区关系。例如,下面对Str1和Str2的比较将返回-1,它表示Str1小于Str2:
Dim str1 As String = "abcd.com"
Dim str2 As String = "abcd.Com"
answer = String.Compare(str1, str2)
我们可以向Compare传入第三个可选的参数。如果第三个参数指定为True,则字符串比较操作忽略大小写,比如下面的代码中answer的值将是0,即两个字符串相等。
answer = String.Compare(str1, str2, True)
正如IndexOf方法,Compare也是一个被重载的方法。我们可以向Compare方法传入第四个参数要求进行地区相关的比较;或者,我们也可以指定字符的起始和结束位置使得比较只对字符串的一部分进行。请参见.NET Framework SDK文档了解详细信息。Split方法把字符串分割成一个由子串构成的数组。使用Split方法时,我们必须指定用来分割字符串的、Char类型的分割字符。下面的Split.aspx页面示范了Split方法的应用:
<%@ Page Language="vb" Explicit="True"%>
<head>
<title>Split实例</title>
<s cript language="vb" runat="server">
Sub Page_Load(Src as Object, E as EventArgs)
Dim strASP As String = _
"ASP.NET is the next generation of Active Server Pages."
Dim strWords() As String
Dim i As Integer
strWords = strASP.Split(" ")
For i = strWords.GetLowerBound(0) to strWords.GetUpperBound(0)
lblOutput.Text &= i & ": " & strWords(i) & "<br />"
Next
End Sub
</s cript>
</head>
<body>
<asp:label id="lblOutput" runat="server" />
</body>
</html>
Split.aspx的输出结果如下:
前面我们讨论了String类部分属性和方法的应用。String还包括许多其他成员,比如:从数组构造出字符串,把字符串中的一个字符替换成其他字符,删除字符串前面或者后面的空白字符,等等。
二、操作数组
我们可以通过System.Array类用各种方法处理数组。与前面的几个类一样,System.String类的许多功能重复了VB语言所具有的功能。但Array类也增加了一些传统VB语言不具备的功能,比如搜索和排序数组。
Array类的GetLowerBound和GetUpperBound方法用于确定数组指定维的下界和上界。下面这个语句来自Split.aspx(参见前面的例子),它通过GetLowerBound和GetUpperBound方法确定strWords数组的边界:
For i = strWords.GetLowerBound(0) to strWords.GetUpperBound(0)
System.Array的Sort静态方法能够对一维数组的内容排序。Sort方法对数组的排序是大小写敏感的,而且它不能对一维以上的数组排序。调用Sort方法的语法下:
Array.Sort(array_name)
对于一维数组,我们还可以用Reverse方法颠倒数组元素的次序。Reverse方法的语法类似于Sort方法:
Array.Reverse(array_name)
下面的代码(来自ArraySort.aspx示例页面)示范了Sort和Reverse方法的应用:
Dim strTerms() As String = {"Js cript", "VB", "ASP", "ASP.NET", ".NET"}
Dim i As Integer
lblOutput.Text &= "Original Array<br />"
For i = strTerms.GetLowerBound(0) to strTerms.GetUpperBound(0)
lblOutput.Text &= i & ": " & strTerms(i) & "<br />"
Next
Array.Sort(strTerms)
lblOutput.Text &= "<br />After Sorting<br />"
For i = strTerms.GetLowerBound(0) to strTerms.GetUpperBound(0)
lblOutput.Text &= i & ": " & strTerms(i) & "<br />"
Next
Array.Reverse(strTerms)
lblOutput.Text &= "<br />After Reversing<br />"
For i = strTerms.GetLowerBound(0) to strTerms.GetUpperBound(0)
lblOutput.Text &= i & ": " & strTerms(i) & "<br />"
Next
ArraySort.aspx页面的输出结果如下:
System.Array方法支持用IndexOf和LastIndexOf方法对一维数组进行搜索,这两个方法与System.String类的同名方法类似。用IndexOf和LastIndexOf方法搜索数组的语法如下:
answer = Array.IndexOf(array_name, search_string)
answer = Array.LastIndexOf(array_name, search_string)
这两个方法分别返回搜索字符串第一次和最后一次匹配的位置;如果不能找到,则返回值是-1。这种搜索是大小写敏感的。例如,在下面的代码中,answer将是2,它表示字符串“ASP”是strTerms数组的第三个元素。
Dim strTerms() As String = {"Js cript", "VB", "ASP", "ASP.NET", ".NET"}
answer = Array.IndexOf(strTerms, "ASP")
三、处理日期/时间数据
System.DateTime类提供了许多处理DateTime值的方法。要创建一个DateTime值,我们只需声明一个DateTime类型的变量,并通过“#”分隔符赋予它一个DateTime常量,如下所示:
Dim SeattleQuake As DateTime = #02/28/01 10:54#
System.DateTime类一个很大的优点是:我们能够通过它的属性非常方便地分析日期/时间值。这些DateTime类属性的含义非常明显,它们是:Year,Month,Day,DayOfWeek,DayOfYear,Hour,Minute,Second,Millisecond,Ticks,等。每个Ticks等于100个纳秒(毫微秒)。例如,在下面的代码中,answer的值将等于10:
answer = SeattleQuake.Hour
我们还可以用Date和TimeOfDay属性获得DateTime数据的日期或者时间部分。TimeOfDay属性返回的是一个TimeSpan值,它表示已流逝的按ticks计的时间。可以想象,利用TimeSpan值的属性我们可以分析出TimeSpan时间的各个部分。请参见.NET Framework SDK文档了解详细信息。
System.DateTime类还提供了几个增加(或者减少)DateTime值某一部分的方法,它们是:AddYears,AddMonths,AddDays,AddHours,AddMinutes,AddSeconds,AddMilliseconds,AddTicks。
例如,下面的代码对指定的日期(BDay)进行加1年、减1年操作:
Dim BDay As DateTime = #6/25/2001 12:00#
Dim NextBDay As DateTime
Dim LastBDay As DateTime
NextBDay = TheDate.AddYears(1)
LastBDay = TheDate.AddYears(-1)
【参考】
介绍COM的历史、.NET框架,以及两者之间的关系:。
NET Framework Developer Resources :