我有一个字符串变量:
p_text = "}{X=45,Y=65}{X=59,Y=65}{X=59,Y=79}{X=45,Y=79}{"
使用此代码
Dim p_text As String
Dim s1_texts As String()
Dim s2_texts As String()
Dim s3_texts As String()
s1_texts = Split(p_text, "}{")
Dim numi As Integer = 0
Dim numj As Integer = 0
Dim numk As Integer = 0
Do Until numi = s1_texts.Length - 1
If s1_texts(numi) = "" Then
numi += 1
Else
s2_texts = Split(s1_texts(numi), ",")
Do Until numj = s2_texts.Length - 1
If s2_texts(numj) = "" Then
numj += 1
Else
s3_texts = Split(s2_texts(numj), "=")
Do Until numk = s3_texts.Length - 1
TextBox4.Text = TextBox4.Text & s3_texts(numk) & vbCrLf
numk += 1
Loop
numj += 1
End If
Loop
numi += 1
End If
Loop
我希望TextBox4显示:
X
45
ý
65
X
59
ý
65
.......
但我只是得到了:
X
X
X
...
问题出在哪里?
答案 0 :(得分:1)
或者您可以用新行替换所有非字母数字字符:
TextBox4.Text = Regex.Replace(p_text, "\W+", vbNewLine).Trim
答案 1 :(得分:0)
(虽然没有直接解决循环问题)
这可能会有所帮助。 Split()
函数可以接受多个字符。因此,您可以这样做:
Sub Main()
' Original string
Dim p_text = "}{X=45,Y=65}{X=59,Y=65}{X=59,Y=79}{X=45,Y=79}{"
' String array split
Dim p_text_new = p_text.Split("}"c, "{"c, "="c, ","c)
' Iterate through each string in array
For Each p In p_text_new
' Check to ensure you don't print empty spaces
If Not String.IsNullOrWhiteSpace(p) Then
Console.WriteLine(p) ' p is the value you want....
End If
Next
End Sub
答案 2 :(得分:0)
如果我不想更改您的代码但只调整其错误,这是我的答案:
使用Do Until x = N
并在循环结束时增加x
时,x的最后一个值将不会通过您在循环开始时指定的条件,因此不会执行。
你的循环有错误:你的结束条件没有正确指定(......长度 - 1比最后一项少一个因为)。此外,numj
和numk
计数器在开始内循环时应重置为零。
修改您的代码如下:
s1_texts = Split(p_text, "}{")
Dim numi As Integer = 0
Dim numj As Integer = 0
Dim numk As Integer = 0
Do Until numi = s1_texts.Length '- 1 => *** removed!
If s1_texts(numi) = "" Then
numi += 1
Else
s2_texts = Split(s1_texts(numi), ",")
numj = 0 '*** reset counter to 0
Do Until numj = s2_texts.Length '- 1 => *** removed!
If s2_texts(numj) = "" Then
numj += 1
Else
s3_texts = Split(s2_texts(numj), "=")
numk = 0 '*** reset counter to 0
Do Until numk = s3_texts.Length '- 1 => *** removed!
TextBox4.Text = TextBox4.Text & s3_texts(numk) & vbCrLf
numk += 1
Loop
numj += 1
End If
Loop
numi += 1
End If
Loop
它会产生你想要的东西。
但如果使用For-Next
循环,则可能更容易:
s1_texts = Split(p_text, "}{")
Dim numi, numj, numk As Integer
For numi = 0 To s1_texts.Length - 1
If s1_texts(numi) <> "" Then
s2_texts = Split(s1_texts(numi), ",")
For numj = 0 To s2_texts.Length - 1
If s2_texts(numj) <> "" Then
s3_texts = Split(s2_texts(numj), "=")
For numk = 0 To s3_texts.Length - 1
TextBox4.Text = TextBox4.Text & s3_texts(numk) & vbCrLf
Next 'numk
End If
Next 'numj
End If
Next 'numi
注意:这里我们应该使用... .Length - 1
作为条件。