rss· 投稿· 设为首页· 加入收藏· 繁體版
当前位置: 火魔网 » 程序开发 » VB.NET

vb.net 字符串处理

VB.NET关于字符串处理有String类别及StringBuilder类别,String类别的使用较为灵活简单但不能直接修改字符串的内容;StringBuilder的功能较多,且还能修改字符串的内容,但其使用程序较复杂。所以对于简单的应用,能使用String类别解决,就用String类别即可,以下将分别介绍这两种类别。
10-1 String类别
在本章之前,字符串的使用与基本数据型别的Integer、Single及Boolean等均相同。例如,以下叙述是宣告并初始化变量str的初值为"abc"。
              Dim str As String = "abc"
       上式的效果等效于:
              Dim a() As Char = New Char() {"a", "b", "c"}
              Dim str As String = New String(a)
       此即为本节所要说明的String类别。建构子
String类别的建构子共有3种多载,本昼并不一一介绍,仅介绍以下Public Sub New(Char())建构子,其余的内容读者可自行查阅在线说明。Public Sub New(Char())
       此建构子需传入一个字符型别的数组作为初使化String对象的值。例如,以下叙述可建立一个str对象,其初值为"abc"。
              Dim a() As Char = New Char() {"a", "b", "c"}
              Dim str As String = New String(a)
       其次,因为String类别的使用非常普及,VB.NET为了减轻使用者的负担,以上叙述亦可简化如下:
              Dim str As String
              str = "abc"
       或Dim str As String = "abc"实例属性
       String类别的常用属性如下:
n       Length
       取得字符串的长度,例如,
              Dim s1 As String = "abcde"
              Console.WriteLine(s1.Length)
       结果是5。静态方法
n       Compare
       比较两个字符串对象,共有6种多载,以下仅介绍两种常用的多载,分别说明如下:
       Public Shared Function Compare(String, String) As Integer
       此方法的语法如下:
       Public Shared Function Compare(
          ByVal strA As String,
          ByVal strB As String
       ) As Integer
       比较strA与strB两对象,并传回一整数,其意义如下:
骰刂意            x小於零strA小於strB零strA等於strB大於零strA大於strB例如,
              Dim s1 As String = "abcde"
              Dim s2 As String = "abcxy"
              Console.WriteLine(String.Compare(s1, s2))
       结果是-1。Public Shared Function Compare(String, String, Boolean) As Integer
       其语法如下:
       Public Shared Function Compare(
          ByVal strA As String,
          ByVal strB As String,
          ByVal ignoreCase As Boolean
       ) As Integer
比较strA与strB两字符串对象,并可设定是否忽略或分辨其大小写,ignoreCase设为True时表示忽略其大小写,其传回值与上述多载的意义相同。    例如,以下叙述可比较s1、s2两字符串,并忽略其大小写。
              Dim s1 As String = "abcxy"
              Dim s2 As String = "ABCXY"
              Console.WriteLine(String.Compare(s1, s2, True))
       结果是0。Concat
传回字符串连结的结果,共有8种多载,在此仅介绍3种多载如下:
       Public Shared Function Concat(String, String)As String
       Public Shared Function Concat(String, String, String)As String
       Public Shared Function Concat(String, String, String, String)As String
       例如,以下叙述可传回两个字符串连结的结果。
              Dim s1 As String = "abcde"
              Dim s2 As String = "abcxy"
              Console.WriteLine(String.Concat(s1, s2))
       结果是abcdeabcxy。Copy
传回与指定字符串相同值的新字符串,也就是字符串的复制。其语法如下:
              Public Shared Function Copy(
                 ByVal str As String
              ) As String
       其中参数str表示要复制的字符串。例如,以下叙述可复制字符串变量s3的值,然后指定给字符串变量s4。
              Dim s3 As String = "ABCXY"
              Dim s4 As String = String.Copy(s3)
              Console.WriteLine(s4)
       结果是ABCXY。实例方法
n       CompareTo
       将这个执行个体与指定字符串对象作比较,其语法如下:
              Public Function CompareTo(
                 ByVal strB As String
              ) As Integer
比较后会传回一整数值,其意义如下:
骰刂意                       x小於0@绦w小於指定字串0@绦w等於指定字串大於0@绦w大於指定字串例如,以下叙述可比较s1与s2两字符串对象。
              Dim s1 As String = "abcde"
              Dim s2 As String = "abcxy"
              Console.WriteLine(s1.CompareTo(s2))
结果是-1。CopyTo
将指定数目的字符,从这个执行个体的指定位置,复制到指定字符数组的指定位置。其语法如下:
       Public Sub CopyTo(
          ByVal sourceIndex As Index,
          ByVal destination() As Char,
          ByVal destinationIndex As Integer,
          ByVal count As Integer
       )
      
其中参数sourceIndex表示这个执行个体中的字符位置,destination 表示Unicode 字符数组,destinationIndex表示destination 的数组元素,count 表示要复制到 destination 的这个执行个体字符数。例如,以下叙述可将s1前3个字符复制到b字符数组前3个字符的位置。
              Dim s1 As String = "abcde"
              Dim b() As Char = New Char() {"1", "2", "3", "4", "5", "6", "7"}
              s1.CopyTo(0, b, 0, 3)
              Console.WriteLine(b)
       结果是abc4567。Equals
判断两个字符串是否相等。其语法如下:
              Public Function Equals(
                 ByVal value As String
              ) As Boolean
       例如,以下叙述可判断s1与s2是否相等。
              Dim s1 As String = "abcde"
              Dim s2 As String = "abcxy"
              Console.WriteLine(s1.Equals(s2))
       结果是False。IndexOf
根据指定字符或字符串,找出此执行个体中第一个符合项目的索引值,共有6种多载,在此仅介绍2种常用的多载,分别说明如下:
              Public Function IndexOf(Char) As Integer
       根据指定字符,找出此执行个体中第一个符合该字符的索引位置,如果没有找到,则传回-1。例如,以下叙述可找出字符"c"在s5中的第一个索引位置。
              Dim s5 As String = "success"
              Console.WriteLine(s5.IndexOf("c"))
       结果是2(索引值由0开始)。
              Public Function IndexOf(String) As Integer
       根据指定字符串,找出此执行个体中第一个符合该字符串的索引位置,如果没有找到,则传回-1。例如,以下叙述可找出字符串"ce"在s5中的第一个索引位置。
              Dim s5 As String = "success"
              Console.WriteLine(s5.IndexOf("ce"))
       结果是3。Insert
将指定字符串插入此执行个体的指定索引位置,然后传回一个新的String执行个体,原有执行个体的值并未被改变,其语法如下:
              Public Function Insert(
                 ByVal startIndex As Integer,
                 ByVal value As String
              ) As String
       其中参数startIndex表示插入的索引位置,value 表示要插入的字符串。例如,以下叙述将字符串"gh"插入至s1 的第5个索引位置,然后传回一个新的String执行个体,其值为"abcdegh",而原有s1的值仍为"abcde"。
              Dim s1 As String = "abcde"
              Console.WriteLine(s1.Insert(5, "gh"))
              Console.WriteLine(s1)LastIndexOf
       根据指定字符或字符串,找出此执行个体中最后一个符合项目的索引值,共有6种多载,在此仅介绍2种常用的多载,分别说明如下:
n       Public Function LastIndexOf(Char) As Integer
       根据指定字符找出此执行个体中最后一个符合该字符的索引位置,如果没有找到则传回-1。例如,以下叙述可找出字符"c"在s5中的最后一个索引位置。
              Dim s5 As String = "success"
              Console.WriteLine(s5.LastIndexOf("c"))
       结果是3。Public Function LastIndexOf(String) As
n       Integer
       根据指定字符串,找出此执行个体最后一个符合该字符串的索引位置,如果没有找到,则传回-1。例如,以下叙述可找出字符串"ss"在s5对象中的最后一个索引位置。
              Dim s5 As String = "success"
              Console.WriteLine(s5.LastIndexOf("ss"))
       结果是5。Remove
将指定数目的字符由此执行个体指定起始位置删除,然后传回一新的String执行个体,原有执行个体的值并未被改变,其语法如下:
              Public Function Remove(
                 ByVal startIndex As Integer,
                 ByVal count As Integer
              ) As String
       其中参数startIndex表示这个执行个体中要开始删除字符的位置,count表示要删除的字符数。例如,以下叙述从s1的第一个字符位置起删除3个字符,其传回值为"de",但原有s1的值仍为"abcde"。
              Dim s1 As String = "abcde"
              Console.WriteLine(s1.Remove(0, 3))
              Console.WriteLine(s1)Replace
以指定字符或字符串,取代此执行个体中符合该字符或字符串的所有项目,其传回值为一更改后的新字符串,原有执行个体中的值并未改变。共有2种多载,分别说明如下:
n       Public Function Replace(Char, Char) As String
       其语法如下:
              Public Function Replace(
                 ByVal oldChar As Char,
                 ByVal newChar As Char
              ) As String
       以newChar取代此执行个体中符合oldChar的所有字符。例如,以下叙述将以一新字符"x"取代s5执行个体中的旧字符"c",其传回值为"suxxess",而原有s5的值仍为"success"。
              Dim s5 As String = "success"
              Console.WriteLine(s5.Replace("c", "x"))
              Console.WriteLine(s5)
n       Public Function Replace(String, String) As String
       其语法如下:
              Public Function Replace(             
                 ByVal oldValue As String,
                 ByVal newValue As String
              ) As String
       以字符串newValue取代此执行个体中符合oldValue的所有字符串。例如,以下叙述将以新字符串"eed"取代s5执行个体中的旧字符串"ess",其传回值为"succeed",而原有s5的值仍为"success"。
              Dim s5 As String = "success"
              Console.WriteLine(s5.Replace("ess","eed"))
              Console.WriteLine(s5)
Substring
       由此执行个体中撷取子字符串。共有2种多载,分别说明如下:
n       Public Function Substring(Integer) As String
       其语法如下:
              Public Function Substring(
                 ByVal startIndex As Integer
              ) As string
       从指定索引位置(startIndex)开始撷取子字符串,一直撷取到最后一个字符的索引位置。例如,以下叙述可从s1的第3个字符位置(索引值2)开始撷取子字符串。
              Dim s1 As String = "abcde"
              Console.WriteLine(s1.Substring(2))
       结果是cde。
Public Function Substring(Integer, Integer) As String
       其语法如下:
              Public Function Substring(
                 ByVal startIndex As Integer
                 ByVal length As Integer
              ) As string
       从指定索引位置开始撷取指定长度的子字符串。例如,以下叙述可从s1的第3个字符位置(索引值2)开始撷取长度为2的子字符串。
              Dim s1 As String = "abcde"
              Console.WriteLine(s1.Substring(2,2))
       结果是cd。ToCharArray
       将此执行个体的字符复制到一字符数组中,其语法如下:
              Public Function ToCharArray() As Char()
       例如,以下叙述可将s1的所有字符复制到c字符数组中。
              Dim s1 As String = "abcde"
              Dim c As Char() = s1.ToCharArray()
              Console.WriteLine(c)
       结果是abcde。ToLower
将此执行个体的字符串内容转为小写,然后传回一新的字符串,原本执行个体的字符串内容并未改变。共有2种多载,以下仅介绍最常用的一种多载。
n       Public Function ToLower() As String
       例如,以下叙述可将s3对象的字符串内容转为小写,然后传回一个新的字符串,其值为“abcxy”,但原本s3对象的字符串内容并未改变。
              Dim s3 As String = "ABCXY"
              Console.WriteLine(s3.ToLower())
              Console.WriteLine(s3)ToUpper
       将此执行个体的字符串内容转为大写,然后传回一新的字符串,原本执行个体的字符串内容并未改变。共有2种多载,以下仅介绍最常用的一种多载。
n       Public Function ToUpper() As String
       例如以下叙述可将s1的字符串内容转为大写,然后传回一个新的字符串,其值为“ABCDE”,但原本s1的字符串内容并未改变。
              Dim s1 As String = "abcde"
              Console.WriteLine(s1.ToUpper())
              Console.WriteLine(s1)Trim
       将字符串两端的空格符移除。其语法如下:
       Public Function Trim() As String
       例如,以下叙述可将s6字符串内容两端空格符移除,并传回一新的字符串。
              Dim s6 As String = "   abcde   "
              Console.WriteLine(s6.Trim())
       结果是abcde。<范例>10-1a
       示范以上String类别的方法。
n       补充说明
       请读者自行开启范例档案e10_1a,并自行浏览程序与执行结果。10-2 StringBuilder类别
       本单元的StringBuilder是一个进阶的字符串处理类别,同时请记得,StringBuilder类别属于System.Text命名空间,所以在程序开头记得要宣告如下:
              Imports System.Text
       程序才能顺利执行。建构子
StringBuilder类别的建构子共有6种多载,在此仅介绍3种常用的多载,分别说明如下:Public Sub New()
       此建构子不需要传递任何参数,并将对象内容初始化为空字符串,且其预设的容量(Capacity)是16。例如,以下叙述可建立一个s对象,其内容为空字符串,其容量是16。
              Dim s As New StringBuilder()
              Console.WriteLine(s)
              Console.WriteLine(s.Capacity)Public Sub New(Integer)
       此建构子需要传递一个Integer型别的参数来指定StringBuilder类别对象的容量。例如,以下叙述可建立一个s1对象,其容量是10。
              Dim s1 As New StringBuilder(10)
              Console.WriteLine(s1.Capacity)Public Sub New(String)
       此建构子需要传递一个String型别的参数来指定StringBuilder类别对象的初始值。例如,以下叙述可建立一个StringBuilder类别的s2对象,此对象的内容是“abc” 。
              Dim s2 As New StringBuilder("abc")
              Console.WriteLine(s2)实例属性Capacity
取得或设定目前执行个体可包含最大字符数的内存空间。例如,以下叙述可取得s1对象的目前容量,并将其容量设定为20。此外,需注意在设定容量大小时,不得小于目前字符串的长度。
              Console.WriteLine(s1.Capacity)
              s1.Capacity = 20
              Console.WriteLine(s1.Capacity)Length
       取得或设定此执行个体的字符串长度。例如,以下叙述可取得s2对象的长度。
              Console.WriteLine(s2.Length)
       结果是3。
       此外,在设定长度时,若指定长度小于目前长度,则此执行个体将被截断为指定长度。例如,以下叙述将s2的长度设定为2,则原本长度为3的s2对象,其最后一个字符"c"将被截掉。
              Dim s2 As New StringBuilder("abc")
              s2.Length = 2
              Console.WriteLine(s2)
       结果是ab。
Append
       将指定字符或字符串加到原字符串尾端。共有19种多载,以下仅介绍2种常用的多载,分别说明如下:
n       Public Function Append(Char) As StringBuilder
       将指定字符加到原字符串的尾端。例如,以下叙述可将字符"d"加到s3对象的尾端。
              Dim s3 As New StringBuilder("abc")
              s3.Append("d")
              Console.WriteLine(s3)
       结果是abcd。
n       Public Function Append(String) As StringBuilder
       将指定字符串加到原字符串的尾端。例如,以下叙述可将s4对象的字符串内容加到s3对象的尾端。
              Dim s4 As New StringBuilder("xyz")
              s4.Append("abcd")
              Console.WriteLine(s4)
       结果是xyzabcd。Equals
       判断两StringBuilder类别对象是否相等。其语法如下:
              Public Function Equals(
                 ByVal sb As StringBuilder
              ) As Boolean
       例如,以下叙述可判断s4与s5两个StringBuilder对象是否相等。
              Dim s4 As New StringBuilder("xyz")
              Dim s5 As New StringBuilder("xyz")
              Console.WriteLine(s4.Equals(s5))
       结果是True。Insert
将指定字符串插入此执行个体的指定字符位置,共有18种多载,可插入不同型别的字符串值,以下仅介绍其中一种多载,其语法如下:
       Public Function StringBuilder Insert(
          ByVal index As Integer,
          ByVal value As String
       ) As StringBuilder
       其中参数index表示要插入的位置,value 表示要插入的字符串。例如,以下叙述可将字符串“abc”插入s5的第1个索引位置。
       Dim s5 As New StringBuilder("xyz")
       s5.Insert(0, "abc")
       Console.WriteLine(s5)
       结果是abcxyz。Remove
       将指定数目的字符,由此执行个体的指定起始位置删除。其语法如下:
              Public Function Remove(
                 ByVal startIndex As Integer,
                 ByVal length As Integer
              ) As StringBuilder
       其中参数startIndex表示要开始移除的位置,length表示要移除的字符数。例如,以下叙述从s5的第一个字符位置起删除3个字符。
              Dim s5 As New StringBuilder("xyzabc")
              s5.Remove(0, 3)
              Console.WriteLine(s5)
       结果是abc。Replace
       以指定字符或字符串,取代此执行个体中符合该字符或字符串的所有项目,共有4种多载,在此仅介绍2种常用的多载,分别说明如下:n       Public Function Replace(Char, Char) As StringBuilder
       其语法如下:
              Public Function Replace(
                 ByVal oldChar As Char,
                 ByVal newChar As Char
              ) As StringBuilder
       以newChar取代此执行个体中符合oldChar的所有字符。例如,以下叙述将以一新字符"a"取代s5执行个体中的旧字符"x"。
              Dim s5 As New StringBuilder("xyz")
              s5.Replace("x", "a")
              Console.WriteLine(s5)
       结果是ayz。
n       Public Function Replace(String, String) As StringBuilder
       其语法如下:
              Public Function Replace(
                 ByVal oldValue As String,
                 ByVal newValue As String
              ) As StringBuilder
       以字符串newValue取代此执行个体中符合oldValue的所有字符串。例如,以下叙述将以新字符串"eed"取代s6执行个体中的旧字符串"ess"。
              Dim s6 As New StringBuilder("success")
              s6.Replace("ess", "eed")
              Console.WriteLine(s6)
       结果是succeed。ToString
       将StringBuilder类别的执行个体转换成String类别,然后传回一个String类别的字符串,原本执行个体的型别并未改变。其语法如下:
              public override string ToString()
       例如,以下叙述可将s6的内容转为String类别,然后传回一String
       类别的字符串,并指定给String类别的对象s7,原本s6的型别仍为StringBuilder。
              Dim s6 As New StringBuilder("success")
              Dim s7 As String = s6.ToString()
              Console.WriteLine(s7)
              Console.WriteLine(s6.GetType())<范例>10-2a
       示范以上StringBuilder类别的方法。
n       补充说明
       请读者自行开启范例档案e10_2a,并自行浏览程序与执行结果。10-3 综合范例
       <范例>10-3a
       有一种游戏为几A几B的猜数字游戏,两个人对玩,互相猜对方预先写下的四位数(四位数中的阿拉伯数字不可重复),若所猜的数字与对方位置相同者为A,数字相同,位置不对,则称为B。例如对方预写的数字为6713,若猜6731则应回应2A2B,若猜7851则回应0A2B。试写一程序,计算机自动产生四位数的随机数,再让使用者猜的一种游戏程序。(计算机应逐一响应使用者已猜的状况)<范例>10-3b
       同上题,使用者预先写下四位数,由计算机猜数字。(使用者必须逐一响应计算机已猜的状况)
n       〔题示〕计算机猜值的算法如下:
       (1)   列出1000至9999的四位数。
       (2)   逐一删除阿拉伯数字重复者,例如1001或3343等。
       (3)   于剩下的可能数字中,挑最小的当作猜值,本例为1023。(使用者应响应几A几B,本例假设使用者响应1A2B)
       (4)   于剩下的可能值中,使用臆测值,本例为1023逐一比较,将不是1A2B者都全部删除。(为什么?请自行思考)
       (5)   重复(3)、(4)两个步骤,直到使用者响应4A0B为止
顶一下
(0)
踩一下
(0)