VB.net循环和Split函数文本处理

时间:2017-01-30 05:15:27

标签: vb.net loops do-while text-processing

我有一个字符串变量:

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

...

问题出在哪里?

3 个答案:

答案 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比最后一项少一个因为)。此外,numjnumk计数器在开始内循环时应重置为零。

修改您的代码如下:

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作为条件。