直播中
值得指出的是,正如本文前面所提到的,當(dāng)我們用VB.NET作為編程語(yǔ)言時(shí),我們常常面臨這樣一種選擇:是使用VB.NET語(yǔ)言內(nèi)建的功能,還是使用等價(jià)的System類功能。在處理數(shù)組、日期/時(shí)間、字符串?dāng)?shù)據(jù)時(shí),我們就面臨這種選擇。如果你曾經(jīng)是一個(gè)VB 6.0程序員,你的第一個(gè)選擇可能會(huì)是經(jīng)過(guò)檢驗(yàn)的、確實(shí)有效的老方法。但是,如果有可能,你最好還是改掉老習(xí)慣、采用新的.NET System類。為什么呢?因?yàn)椴捎肧ystem類能夠使你的代碼更容易移植到其他.NET語(yǔ)言以及未來(lái)的VB.NET版本。
System.String類提供了豐富的字符串處理能力。使用System.String類,我們可以:確定字符串的長(zhǎng)度,查找子串,改變字符串的大小寫(xiě),比較兩個(gè)字符串,分割字符串,等等。
確定字符串長(zhǎng)度使用的是Length屬性。例如,在下面的代碼中,intLength的值將是4:
Dim strColor As String = "blue"
Dim intLength As Integer
intLength = strColor.length
我們用IndexOf方法從字符串找出第一個(gè)匹配的子串。如果能夠找到子串,IndexOf方法返回子串的開(kāi)始位置(第一個(gè)字符的開(kāi)始位置為0);如果不能找到,則IndexOf返回-1。IndexOf的查找是大小寫(xiě)敏感的。IndexOf是一個(gè)被重載(Overload)的方法,它允許傳入的參數(shù)包括:Char類型的字符,String類型的字符串,Char類型的字符數(shù)組。下面這個(gè)IndexOf.aspx頁(yè)面示范了三種不同參數(shù)類型IndexOf方法的運(yùn)用:
<%@ Page Language="vb" Explicit="True"%>
<head>
<title>System.String實(shí)例</title>
<script 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
</script>
</head>
<body>
<asp:label id="lblOutput" runat="server" />
</body>
</html>
這個(gè)頁(yè)面的運(yùn)行結(jié)果如下:
IndexOf允許指定兩個(gè)用來(lái)限制搜索的可選參數(shù),它們分別代表搜索字符串的起始和結(jié)束位置。例如,下面的代碼對(duì)chrVowels的搜索限制在第10到20個(gè)字符之間:
strPhrase.IndexOf(chrVowels, 10, 20)
LastIndexOf方法類似于IndexOf方法,但它搜索的是子串的最后一次出現(xiàn)。例如,如果你修改IndexOf.aspx頁(yè)面,用LastIndexOf方法來(lái)取代IndexOf方法,則strWord的位置將是39而不是15。
使用System.String的ToUpper和ToLower方法可以把字符串分別改成全部大寫(xiě)或者全部小寫(xiě)。例如:
strUpper = "This is a mixed case sentence".ToUpper()
strLower = "This is a mixed case sentence".ToLower()
從這個(gè)例子可以看出,System.String的屬性和方法既可以在字符串變量中應(yīng)用,也可以直接在字符串文本中應(yīng)用。
你可以用Compare方法比較兩個(gè)字符串是否相同。如果兩個(gè)字符串相同,Compare方法返回0;如果第一個(gè)字符串小于第二個(gè)字符串,Compare返回一個(gè)負(fù)數(shù);如果第一個(gè)字符串大于第二個(gè)字符串,Compare方法返回一個(gè)正數(shù)。Compare是一個(gè)靜態(tài)方法(參見(jiàn)本文前面關(guān)于靜態(tài)方法和實(shí)例方法的說(shuō)明)。默認(rèn)情況下,Compare對(duì)字符串的比較是大小寫(xiě)敏感的,且不考慮地區(qū)關(guān)系。例如,下面對(duì)Str1和Str2的比較將返回-1,它表示Str1小于Str2:
Dim str1 As String = "abcd.com"
Dim str2 As String = "abcd.Com"
answer = String.Compare(str1, str2)
我們可以向Compare傳入第三個(gè)可選的參數(shù)。如果第三個(gè)參數(shù)指定為T(mén)rue,則字符串比較操作忽略大小寫(xiě),比如下面的代碼中answer的值將是0,即兩個(gè)字符串相等。
answer = String.Compare(str1, str2, True)
正如IndexOf方法,Compare也是一個(gè)被重載的方法。我們可以向Compare方法傳入第四個(gè)參數(shù)要求進(jìn)行地區(qū)相關(guān)的比較;或者,我們也可以指定字符的起始和結(jié)束位置使得比較只對(duì)字符串的一部分進(jìn)行。請(qǐng)參見(jiàn).NET Framework SDK文檔了解詳細(xì)信息。Split方法把字符串分割成一個(gè)由子串構(gòu)成的數(shù)組。使用Split方法時(shí),我們必須指定用來(lái)分割字符串的、Char類型的分割字符。下面的Split.aspx頁(yè)面示范了Split方法的應(yīng)用:
<%@ Page Language="vb" Explicit="True"%>
<head>
<title>Split實(shí)例</title>
<script 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
</script>
</head>
<body>
<asp:label id="lblOutput" runat="server" />
</body>
</html>
Split.aspx的輸出結(jié)果如下:
前面我們討論了String類部分屬性和方法的應(yīng)用。String還包括許多其他成員,比如:從數(shù)組構(gòu)造出字符串,把字符串中的一個(gè)字符替換成其他字符,刪除字符串前面或者后面的空白字符,等等。
二、操作數(shù)組
我們可以通過(guò)System.Array類用各種方法處理數(shù)組。與前面的幾個(gè)類一樣,System.String類的許多功能重復(fù)了VB語(yǔ)言所具有的功能。但Array類也增加了一些傳統(tǒng)VB語(yǔ)言不具備的功能,比如搜索和排序數(shù)組。
Array類的GetLowerBound和GetUpperBound方法用于確定數(shù)組指定維的下界和上界。下面這個(gè)語(yǔ)句來(lái)自Split.aspx(參見(jiàn)前面的例子),它通過(guò)GetLowerBound和GetUpperBound方法確定strWords數(shù)組的邊界:
For i = strWords.GetLowerBound(0) to strWords.GetUpperBound(0)
System.Array的Sort靜態(tài)方法能夠?qū)σ痪S數(shù)組的內(nèi)容排序。Sort方法對(duì)數(shù)組的排序是大小寫(xiě)敏感的,而且它不能對(duì)一維以上的數(shù)組排序。調(diào)用Sort方法的語(yǔ)法下:
Array.Sort(array_name)
對(duì)于一維數(shù)組,我們還可以用Reverse方法顛倒數(shù)組元素的次序。Reverse方法的語(yǔ)法類似于Sort方法:
Array.Reverse(array_name)
下面的代碼(來(lái)自ArraySort.aspx示例頁(yè)面)示范了Sort和Reverse方法的應(yīng)用:
Dim strTerms() As String = {"JScript", "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頁(yè)面的輸出結(jié)果如下:
System.Array方法支持用IndexOf和LastIndexOf方法對(duì)一維數(shù)組進(jìn)行搜索,這兩個(gè)方法與System.String類的同名方法類似。用IndexOf和LastIndexOf方法搜索數(shù)組的語(yǔ)法如下:
answer = Array.IndexOf(array_name, search_string)
answer = Array.LastIndexOf(array_name, search_string)
這兩個(gè)方法分別返回搜索字符串第一次和最后一次匹配的位置;如果不能找到,則返回值是-1。這種搜索是大小寫(xiě)敏感的。例如,在下面的代碼中,answer將是2,它表示字符串“ASP”是strTerms數(shù)組的第三個(gè)元素。
Dim strTerms() As String = {"JScript", "VB", "ASP", "ASP.NET", ".NET"}
answer = Array.IndexOf(strTerms, "ASP")
三、處理日期/時(shí)間數(shù)據(jù)
System.DateTime類提供了許多處理DateTime值的方法。要?jiǎng)?chuàng)建一個(gè)DateTime值,我們只需聲明一個(gè)DateTime類型的變量,并通過(guò)“#”分隔符賦予它一個(gè)DateTime常量,如下所示:
Dim SeattleQuake As DateTime = #02/28/01 10:54#
System.DateTime類一個(gè)很大的優(yōu)點(diǎn)是:我們能夠通過(guò)它的屬性非常方便地分析日期/時(shí)間值。這些DateTime類屬性的含義非常明顯,它們是:Year,Month,Day,DayOfWeek,DayOfYear,Hour,Minute,Second,Millisecond,Ticks,等。每個(gè)Ticks等于100個(gè)納秒(毫微秒)。例如,在下面的代碼中,answer的值將等于10:
answer = SeattleQuake.Hour
我們還可以用Date和TimeOfDay屬性獲得DateTime數(shù)據(jù)的日期或者時(shí)間部分。TimeOfDay屬性返回的是一個(gè)TimeSpan值,它表示已流逝的按ticks計(jì)的時(shí)間??梢韵胂?,利用TimeSpan值的屬性我們可以分析出TimeSpan時(shí)間的各個(gè)部分。請(qǐng)參見(jiàn).NET Framework SDK文檔了解詳細(xì)信息。
System.DateTime類還提供了幾個(gè)增加(或者減少)DateTime值某一部分的方法,它們是:AddYears,AddMonths,AddDays,AddHours,AddMinutes,AddSeconds,AddMilliseconds,AddTicks。
例如,下面的代碼對(duì)指定的日期(BDay)進(jìn)行加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框架,以及兩者之間的關(guān)系:http://www.microsoft.com/NET/developer/framework_com.asp。
NET Framework Developer Resources :http://msdn.microsoft.com/net/framework/default.asp