#vb.net
#vb.net
Вопрос:
Мне нужно создать MessageBox, который адаптирован к количеству раз, когда слово появляется в строке. Таким образом, я должен быть в состоянии подсчитать, сколько раз слово появляется в строке. Если это больше, чем 1 раз, появится определенное сообщение. Если это слово встречается только 1 раз, появится другое сообщение. Для ясности мне не нужно знать, сколько раз подстрока встречается в строке. Только если это происходит более одного раза.
Например, у меня есть строка hello hi hello
. Я собираюсь проверить слово «привет». Слово встречается несколько раз, поэтому будет отображаться окно сообщения, в котором говорится, что слово появилось несколько раз. Я не знаю, как это сделать, но я думаю, что это будет что-то вроде кода, который я написал ниже?
Dim stringToCheck, stringToFind As String
stringToCheck = "hello hi hello"
stringToFind = "hello"
If ... Then
'The stringToFind appeared more than once in stringToCheck
MessageBox.Show($"The string {stringToFind} was found more then once.", "Found multiple times")
Else
'The stringToFind appeared only one time in stringToCheck
MessageBox.Show($"The string {stringToFind} was found one time.", "Found once")
End If
Я надеюсь, что кто-нибудь сможет мне помочь. Заранее спасибо!
Комментарии:
1. Если
IndexOf
иLastIndexOf
возвращает одно и то же значение, то существует только один экземпляр.2. Регулярное выражение. Совпадения . Например.,
Dim count = Regex.Matches(stringToCheck, stringToFind).Count
3. Если вы решили использовать регулярное выражение, вам нужно быть осторожным,
stringToFind
если оно содержит специальные символы, которые используются регулярными выражениями. На всякий случай обязательно используйтеRegex.Escape(stringToFind)
.4. @jmcilhinney, если только они оба не возвращают -1, и в этом случае экземпляра нет.
5. @Idle_Mind, правильно. Я использовал метод из jmcilhinney, и он отлично работает для меня. В ситуации, когда я использую это для, всегда есть хотя бы один из
stringToFind
instringToCheck
. Но спасибо за комментарий, потому что я этого не знал! Мой вопрос решен.
Ответ №1:
Есть три возможных результата, которые могут произойти:
- Нет вхождений
- Одно вхождение
- Множественные вхождения
Как было предложено jmcilhinney, вы можете использовать indexOf и lastIndexOf, чтобы помочь вам сделать это определение.
Если строка не найдена, то будет возвращено значение -1. Если строка присутствует (-1 не возвращается), но встречается только один раз, то два значения будут одинаковыми. Если два значения не равны -1 и отличаются, то присутствуют множественные вхождения.
Вот простой If...Else
блок, который показывает, что проверяются все три состояния:
Dim stringToCheck, stringToFind As String
stringToCheck = "hello hi hello"
stringToFind = "hello"
Dim index1, index2 As Integer
index1 = stringToCheck.IndexOf(stringToFind)
If index1 <> -1 Then
index2 = stringToCheck.LastIndexOf(stringToFind)
End If
If index1 = -1 Then
MessageBox.Show($"The string {stringToFind} was NOT found.", "No occurrences")
ElseIf index1 = index2 Then
MessageBox.Show($"The string {stringToFind} was found ONCE.", "One occurrence")
Else
MessageBox.Show($"The string {stringToFind} was found MULTIPLE TIMES.", "Multiple occurrences")
End If
Комментарии:
1.Небольшим улучшением было бы проверять
LastIndexOf()
только ifIndexOf()
returns>=0
.