Есть ли функция для получения строки между 2 строками в vb.net

#vb.net

Вопрос:

В неудачной попытке научить мою дочь программированию я научил ее делать это

 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
 

Мы знаем, что делает эта функция. Получите строки между 2 строками в большой строке.

Интересно, есть ли для этого встроенная функция?

Образцы:

Если я использую эту тестовую функцию

 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
 

Комментарии:

1. Можете ли вы привести пример?

2. Образцы идут. Я сейчас вернусь

3. Но я уже могу дать вам ответ, если он работает (это выглядит так), то это самое близкое, что вы можете получить от «встроенной функции».

4. Итак, ответ в том, что для этого нет встроенной функции?

Ответ №1:

Нет, встроенного метода нет, или да, есть, но вы их уже используете.

Возможно, вы хотите обработать неверный ввод. Кроме того, ваш метод включает в себя маркер поиска, но вам нужен текст между ними, так что, возможно, этот немного лучше:

 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"
 

Комментарии:

1. Спасибо. Однако мой код не вернет маркер поиска. Я проверил это. Кроме того, строки поиска могут быть длиннее 1 символа