#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 символа