首先创建两个textbox文本框(本程序未改name)和一个按钮,程序预期达到的效果是在文本一中输入一段带#的任意文本,点击按钮,将转化后的文本显示在textbox2中
预期目的实现
以下是代码
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim str As String = TextBox1.Text '键盘输入“123#456#”
TextBox2.Text = Y(str)
End Sub
Public Shared Function Y(ByVal Str As String) As String
'定义一个SQLstr对象,最后返回被转换的文本
Dim SQLstr As String
'本人喜欢给新定义的对象赋值,不过不复制也不影响
SQLstr = ""
'对传过来的文本进行简单的判断,如果文本为空,则返回一个空值
If Str = "" Then
Return ""
End If
'定义一个变量p,用于记录一段文本中要转变的符号的第一次出现的坐标
Dim p As Integer
'将文本中的“#”坐标赋值给p
'indexof("s" , n) 有两个参数,第一个参数s的意思是字符串中你要查找的字符,本例中就是“#”。
'第二个参数n的意思是从字符串中第多少位开始检索,0就表示从字符串第一位开始检索“#”的坐标, 0可以省略。
'如果没有检索出要查找的字符,则返回-1
p = Str.IndexOf("#", 0)
'没有需要转换的特殊符号的时候
'考虑到文本可能有不止一个要转变的特殊符号,所有先用p做一个判断,文本中有特殊符号,则一定p>=0
If p = -1 Then
'p=-1表示文本中没有要转变的字符,则直接输出文本即可
Return Str
Else
'这段代码的意思是,截取str(123#456#)从0开始,截取长度为p的所有数字,赋值给SQLstr
SQLstr = Str.Substring(0, p) 'sqlstr=123
'定义一个变量q,用于记录一段文本中要转变的符号的第n次出现的坐标
Dim q As Integer
While p >= 0
'从第一个“#”后,即p+1=4的坐标开始检索下一个“#”的坐标,赋值给q,“123#456#” 即q=7
q = Str.IndexOf("#", p + 1)
'做一个判断,如果第一个“#”后面还有“#”,则q一定>=0,如果没有,则q=-1(前面说过原因)
If q >= 0 Then
'SQLstr(123) = SQLstr(123) & "*"(将第一个#转换) & Str(123#456#)从第4(p+1)位开始截取,切取长度位3(7-3-1)即Str.Substring(456)
'SQLstr= 123+"*"+456
SQLstr = SQLstr & "*" & Str.Substring(p + 1, q - p - 1)
'将q(7)赋值给p,从新循环
p = q
Else
'没有"#"的情况,让q等于字符串的长度(8)
q = Str.Length
'同上
SQLstr = SQLstr & "*" & Str.Substring(p + 1, q - p - 1)
'设置条件,跳出循环
p = -1
End If
End While
'得到转化后的字符串,输出
Return SQLstr
End If
End Function
End Class
emmmm,写了很多注释,,,也是为了以后我看一眼就能想起来,,,