Поиск символов в строке vb.net - PullRequest
0 голосов
/ 08 мая 2018

У меня вопрос о переполнении стека относительно следующего кода:

For Each DeltaCharB As Char In DeltaString
    If DeltaCharB = "[" Then
        Dim DeltaIndexB As Integer = TB8.IndexOf("[B|")
        Dim DeltaStringB As String = TB8.Substring(DeltaIndexB + 3, TB8.IndexOf("]", DeltaIndexB + 1) - DeltaIndexB - 3)
        MsgBox(DeltaStringB)
    Else
        'Do nothing
    End If
Next

Создана проблема в том, что если код запускается X раз, когда найден символ "[", строка отображается такое же количество X раз в окне сообщения.

Однако я хочу, чтобы он обрабатывался только 1Х. Я попытался изменить следующую строку, но, как я ожидал, разрешен только один символ за раз.

If DeltaCharB = "[B|" Then

Обычно строка, используемая для поиска, выглядит следующим образом:

{[A|Text belonging to entry A][B|Text belonging to entry B][C|Text belonging to entry C]}.... ect...ect

Доза, кто-нибудь знает, как решить эту проблему?

1 Ответ

0 голосов
/ 08 мая 2018

Зачем вам петля? Ваши разделители четко определены, вы можете просто сделать это:

Function GetContent(byval input as string, byval delimiter as string) as string
    Dim fullDelimiter = "["& delimiter &"|"
    Dim BeginPosition as Integer = input.IndexOf(fullDelimiter)
    if BeginPosition > -1 then
        BeginPosition += fullDelimiter.Length
        Dim EndPosition = input.IndexOf("][", BeginPosition)
        if EndPosition > -1 then
            return input.SubString(BeginPosition, EndPosition - BeginPosition)
        end if
    end if
    return ""
End Function

И использование:

Dim s as string = "[A|Text belonging to entry A][B|Text belonging to entry B][C|Text belonging to entry C]"

Dim content = GetContent(s, "B")

содержимое теперь содержит «Текст, принадлежащий записи B»

Обратите внимание, что с этим кодом разделитель может быть строкой любой длины от [ до |.

Более общее решение, которое будет соответствовать любому входному формату, будет означать также принятие конечного разделителя в функции:

Function GetContent(byval input as string, byval FromDelimiter as string, byval ToDelimiter as string) as string
    Dim BeginPosition as Integer = input.IndexOf(FromDelimiter)
    if BeginPosition > -1 then
        BeginPosition += FromDelimiter.Length
        Dim EndPosition = input.IndexOf(ToDelimiter, BeginPosition)
        if EndPosition > -1 then
            return input.SubString(BeginPosition, EndPosition - BeginPosition)
        end if
    end if
    return ""
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...