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
任何帮助将不胜感激
答案 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