Как определить позиции, в которых слово встречается в данном тексте?

#vb.net #visual-studio #vb.net-2010

#vb.net #visual-studio #vb.net-2010

Вопрос:

Я разрабатываю программу, в которой вы можете ввести предложение, а затем выполнить поиск по слову. Затем программа сообщит вам, в каких позициях встречается это слово. Я написал некоторый код, но не знаю, как продолжить.

 Module Module1


Sub Main()
    Dim Sentence As String
    Dim SentenceLength As Integer
    Dim L As Integer = 0
    Dim LotsofText As String = Console.ReadLine


    Console.WriteLine("Enter your word ") : Sentence = Console.ReadLine


    For L = 1 To LotsofText.Length
        If (Mid(LotsofText, L, 1)) = " " Then
        End If
        L = L   1


        Dim TextCounter As Integer = 0
        Dim MainWord As String = Sentence
        Dim CountChar As String = " "
        Do While InStr(MainWord, CountChar) > 0
            MainWord = Mid(MainWord, 1   InStr(MainWord, CountChar), Len(MainWord))
            TextCounter = TextCounter   1

            'Text = TextCounter   2
            ' Console.WriteLine(Text)

        Loop


        Console.WriteLine(TextCounter)


        Console.Write("Press Enter to Exit")
        Console.ReadLine()


End Sub


End Module
  

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

1. Mid, Instr и т. Д. Существуют Только для совместимости с VB6 и VBA. Они никогда не должны использоваться.

Ответ №1:

Преобразуйте этот фрагмент кода из C # в Visual Basic. match.Index укажет позицию данного слова.

 var rx = new Regex("your");
foreach (Match match in rx.Matches("This is your text! This is your text!"))
{
    int i = match.Index;
}
  

Ответ №2:

Чтобы найти только слова, а не подстроки (например, игнорировать «cat» в «catty»):

     Dim LotsofText = "catty cat"
    Dim Sentence = "cat"

    Dim pattern = "b" amp; Regex.Escape(Sentence) amp; "b"
    Dim matches = Regex.Matches(LotsofText, pattern)

    For Each m As Match In matches
        Debug.Print(m.Index amp; "") ' 6
    Next
  

Если вы хотите также найти вложенные строки, вы можете удалить "b" части.

Ответ №3:

Если вы добавите эту функцию в свой код:

 Public Function GetIndexes(ByVal SearchWithinThis As String, ByVal SearchForThis As String) As List(Of Integer)
    Dim Result As New List(Of Integer)

    Dim i As Integer = SearchWithinThis.IndexOf(SearchForThis)

    While (i <> -1)
        Result.Add(i)
        i = SearchWithinThis.IndexOf(SearchForThis, i   1)
    End While

    Return Result
End Function
  

И вызовите функцию в своем коде:

 Dim Indexes as list(of Integer) = GetIndexes(LotsofText, Sentence)
  

Теперь getIndexes найдет все индексы слова, которое вы ищете в предложении, и поместит их в индексы списка.