如何在数组中的某个点之后从列表框中读取文本?

时间:2014-01-10 21:03:10

标签: vb.net visual-studio-2010 visual-studio console

Bellow我有一些代码带有RichTextBox1文本并将其放在列表框中。我这样做是为了逐行阅读文本,当检查这个时我把文本放在一个数组中,这样我就可以检查文本和空格。这一切都正常工作但是当我输入'Print = Hello My Name is'之类的命令时,控制台只输出Hello而不输出其他内容,即使我希望它打印'Hello My Name is'。所以问题是在第3个空间之后打印

ListBox1.Items.Clear()
///RTB = rich Text Box

        ListBox1.Items.AddRange(RTB.Lines)
            For i = 0 To ListBox1.Items.Count - 1
            Dim teststring As String = ListBox1.Items.Item(i)
            Dim testarray() As String = Split(teststring)

            If testarray(0) = "Print" Then
                If testarray(1) = "=" Then
                    Console.WriteLine(testarray(2))
                End If
            End If

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:4)

嗯,你只是分开了#34; ",所以这是预期的行为。它只做你告诉它做的事。

您可能需要考虑使用正则表达式来正确实现这种解析。

这应该让你开始:

Imports System.Text.RegularExpressions

Module Module1
  Sub Main()
    Dim s As String = "Print = Hello My Name is"
    Dim re As New Regex("(.*)=(.*)")

    Dim m As Match = re.Match(s)
    Console.WriteLine(m.Groups(2).Value.Trim) '=Console.WriteLine(testarray(2))
  End Sub
End Module

如评论中所述,最后一行应该打印出您期望的内容。

答案 1 :(得分:0)

问题是你在没有附加参数的情况下调用Split,因此,默认情况下,它会在空格上分割。这意味着您的testarray将在每行中包含一个元素。要修复它,你可以拆分=字符,如下所示:

If testString.Contains("=") Then
    Dim testArray() As String = teststring.Split("="c)
    If testArray(0) = "Print" Then
        Console.WriteLine(testArray(1))
    End If
End If

此外,如果单词“Print”和等号之间没有空格,则上述代码才能正常工作。要处理它们之间的空白区域,您需要在拆分后修剪它们。

但是,只有在要打印的字符串不包含等号时,才能正常工作。如果这是一个问题,你可以做这样的事情:

Dim index As Integer = testString.IndexOf("=")
If index >= 0 Then
    If testString.Substring(0, index).TrimEnd() = "Print" Then
        Console.WriteLine(testString.Substring(index + 1).TrimStart())
    End If
End If

通常情况下,我建议使用RegEx来做这样的事情,但是我认为,你是初学者,现在可能有点为你提前了。

我还应该提到你不需要使用ListBox来保持线条。你可以把它们放在内存中的数组中。或者,更好的是,您可以直接遍历富文本框的Lines属性的返回值,而不是将其存储在变量中,例如:

For Each line As String In RTB.Lines
    Dim index As Integer = line.IndexOf("=")
    If index >= 0 Then
        If line.Substring(0, index).TrimEnd() = "Print" Then
            Console.WriteLine(line.Substring(index + 1).TrimStart())
        End If
    End If        
Next