首页 > 解决方案 > 是否有一个函数可以在 vb.net 中的 2 个字符串之间获取字符串

问题描述

在教我女儿编程失败的尝试中,我教她做这个

Public Shared Function getBetween(strSource As String, startSearchIndex As Integer, startSearch As String, endSearch As String) As (nextIndex As Integer, Content As String)
    Dim IndexStart = strSource.IndexOf(startSearch, startSearchIndex)
    Dim startContent = IndexStart + startSearch.Length
    Dim indexEnd = strSource.IndexOf(endSearch, startContent)
    Dim content = strSource.Substring(startContent, indexEnd - startContent)
    Dim nextIndex = indexEnd + endSearch.Length
    Return (nextIndex, content)

End Function

我们知道函数的作用。获取大字符串中两个字符串之间的字符串。

我想知道是否有内置功能?

样品:

如果我使用这个测试功能

Public Shared Sub test(txt As TextBox)
    Dim source = "0123456789([012345])0123456789([ABCDEF])0123456789([GHIJK])"
    txt.Text += source + System.Environment.NewLine
    getBetween3Times(txt, source, "(", ")")
    getBetween3Times(txt, source, "([", "])")
    getBetween3Times(txt, source, "[", "]")
End Sub

Private Shared Sub getBetween3Times(txt As TextBox, source As String, startsearch As String, endsearch As String)
    Dim result = getBetween(source, 0, startsearch, endsearch)
    txt.Text += result.Content + System.Environment.NewLine
    result = getBetween(source, result.nextIndex, startsearch, endsearch)
    txt.Text += result.Content + System.Environment.NewLine
    result = getBetween(source, result.nextIndex, startsearch, endsearch)
    txt.Text += result.Content + System.Environment.NewLine
End Sub

它会产生

0123456789([012345])0123456789([ABCDEF])0123456789([GHIJK])
[012345]
[ABCDEF]
[GHIJK]
012345
ABCDEF
GHIJK
012345
ABCDEF
GHIJK

标签: vb.net

解决方案


不,没有内置方法,或者是的,有,但你已经使用它们了。

也许您想处理无效输入。此外,您的方法包括搜索令牌,但您想要介于两者之间的文本,所以也许这个更好一点:

Public Shared Function GetTextBetween(strSource As String, startSearchIndex As Integer, startSearch As String, endSearch As String) As (nextIndex As Integer, Content As String)
    If startSearchIndex < 0 Orelse startSearchIndex >= strSource.Length Then Throw New ArgumentException(Nameof(startSearchIndex))
    Dim index = strSource.IndexOf(startSearch, startSearchIndex)
    If index = -1 Then Return (-1, Nothing)
    index += startSearch.Length
    Dim endIndex = strSource.IndexOf(endSearch, index+1)
    If endIndex = -1 Then Return (-1, Nothing)
    Dim content = strSource.Substring(index, endIndex - index)
    Return (endIndex + endSearch.Length, content)
End Function 

Dim sampleText = "It is the end of the world"
Dim result = GetTextBetween(sampleText, 0, "is ", " of") ' should be "the end"

推荐阅读