解析字符串 - "包含"不够

时间:2016-10-16 15:11:27

标签: vb.net

我使用此代码检查String是否在另一个String

If StringData(1).Contains("-SomeText2.") Then
    'some code
End If

'StringData(1) looks like this:
'-SomeText1.1401-|-SomeText2.0802-|-SomeText3.23-|-SomeText4.104-|
'In case I look for -SomeText1. I need 1401
'In case I look for -SomeText2. I need 0802
'In case I look for -SomeText3. I need 23
'In case I look for -SomeText4. I need 104

我首先检查-SomeText2.是否在StringData(1),如果是,我需要获取文字的下一部分:0802 ,这是我不知道怎么做的部分,我该怎么办?

所有字符串由|分隔,所有子字符串以-开头和结尾,并且.将第一部分与第二部分分开。我检查以-开头并以.开头的所有字符串,因为中间有一些字符-|,因此Split函数赢了&#39工作。

这些字符串经常变化,所以无论字符串的长度如何,我都需要检查它。

2 个答案:

答案 0 :(得分:3)

我只是将字符串拆分并在"和#34;之间获取文本。和" - "当找到搜索文本时:

    Dim str As String = "-SomeText1.1401-|-SomeText2.0802-|-SomeText3.23-|-SomeText4.104-"
    Dim searches() As String = {"-SomeText1", "-SomeText2", "-SomeText3", "-SomeText4"}
    For Each search As String In searches
        For Each value As String In str.Split(CChar("|"))
            If value.Contains(search) Then
                Dim partIwant As String = value.Substring(value.IndexOf(".") + 1, value.Length - value.IndexOf(".") - 2)
                MsgBox(partIwant)
                'Outputs: 1401, 0802, 23, 104
                Exit For
            End If
        Next
    Next

在这个例子中,我们只使用Contains()来查看我们的搜索字符串是否存在...我们实际上无法使用该函数获取任何进一步的信息,因为它返回的所有信息都是True或者错误。因此,一旦我们知道我们的字符串已被找到,只需要进行一些字符串操作就可以在"。"之间抓取文本。和" - "字符。 IndexOf()将获取句点的索引,然后我们只是在那里和字符串的最后一个字符之间拉文本。

答案 1 :(得分:1)

您的问题与WPF无关,因此标记和标题会产生误导。

要解决您的问题,您应该使用String.IndexOf(string)代替String.Contains(string)。这告诉你给定字符串的起始位置。如果该值为-1,则表示原始字符串根本不包含您的搜索字符串。

获得该起始索引后,您可以使用String.IndexOf(string, int)搜索下一次出现的-,以便了解该条目的停止位置。第二个参数告诉它应该从哪个索引开始搜索,在这种情况下,你应该在找到第一个匹配的索引处开始搜索。

现在您已经知道匹配的起始索引,条目的结束索引和搜索字符串的长度,您可以将它们放在一起并轻松使用String.Substring(int, int)来获取您的字符串部分有兴趣。

这是直截了当,天真的解决方案。更复杂的解决方案只是为搜索字符串构建正则表达式,该搜索字符串的构建方式使您感兴趣的部分包含在捕获组中。但这是一个更精细的主题。