2016-08-17 5 views
2

Простой кодер с простым вопросом.Поиск определенной строки в VB.Net

У меня есть текстовое поле (txtMsg), которое, когда я ввожу что-то в него (т. Е. «Мне скучно») и нажимает кнопку (btnSubmit), он показывает текст в поле списка (lstMsg).

Я хотел бы проверить, вводится ли конкретное слово («да») пользователем, когда они нажимают кнопку «Отправить» в качестве отдельной части моего кода.

Проблема, которую я имею, это «да», может быть в любой точке текстового поля, и пользователь может свободно писать любое слово/фразу.

Мой первоначальный код был;

If txtMsg.Contains(" yes ") Then 
lstMsg.Items.Add("Good")  

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

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

Любые советы?

+0

ли вам знаете, как использовать регулярные выражения? –

+1

Я как бы сам себя учил на лету, так что у меня есть более глубокое понимание, чем вы наверняка :) – HughJanus

+0

Как насчет 'If Regex.IsMatch (txtMsg," \ byes \ b ") Then ...'? Часть '\ b' соответствует границам слов, поэтому соответствует всему слову« да », но не« вчера »и т. Д. – Mark

ответ

0

Вы не ищете «да», поэтому вы не должны искать его с помощью метода contains. Вы ищете «да».

Вместо этого используйте txtMsg.toLower.contains («да»), и оператор if будет выполняться независимо от того, что было до или после «да». Он также будет игнорировать капитализацию (в случае, если «да» содержит заглавные буквы).

Dim contained as Boolean = False 
Dim loc as integer = txtMsg.toLower.indexOf("yes") 
If loc >= 0 Then 
    If loc > 0 And loc < txtMsg.length - 3 Then 
     If Not txtMsg.substring(loc - 1, loc).isAlpha And 
      Not txtMsg.substring(loc + 3, loc + 4).isAlpha Then 
      lstMsg.Items.Add("Good") 
      contained = true 
     End If 
    ElseIf loc > 0 Then 
     If Not txtMsg.substring(loc - 1, loc).isAlpha Then 
      lstMsg.Items.Add("Good") 
      contained = true 
     End If 
    Else 
     If Not txtMsg.substring(loc + 3, loc + 4).isAlpha Then 
      lstMsg.Items.Add("Good") 
      contained = true 
     End If 
    End If    
ElseIf contained = False 
    'your code here 
End If 

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

+0

Я хочу, чтобы произошли два события на основе определения« да »или нет. Если да, то выполните событие 1 - Если да не найдено, то выполните событие 2, поэтому в этом случае мне все еще требуется инструкция if? И, наконец, спасибо за указание, но содержимое txtmsg уже сведено от предыдущего кодирования в моем решении, которое я не упомянул в этом сообщении, но спасибо за подтверждение и помощь в этом факте :) – HughJanus

+0

Просто добавьте инструкцию else, если if-test возвращает false, код в инструкции else выполняется вместо кода в выражении if. Я опубликовал редактирование моего кода. – Luke

+0

Спасибо, Люк. Я попробовал это, но проблема здесь в том, что успешная IF возникла бы для фразы «Вчера» (в качестве примера) - из-за существования «да» в слове. Этот конкретный элемент имеет то, что беспокоило меня больше всего. Какие-либо предложения? – HughJanus

0

Хорошо, из того, что я могу понять из вашего вопроса и комментариев, вместо использования списка для поиска значения и конфликта с «да» и «вчера» я бы использовал массив.
Сказав это, попробуйте.

Прежде всего объявляю это право под Public Class Form1

Dim myList As List(Of String) = New List(Of String) 

на это позволит вам получить доступ к этому массиву из любого места на Form1 или что вы назвали текущую форму вы работаете с.

Следующая добавить это к кнопке, что выполнение команды (я использовал Button1)

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    If myList.Contains(TextBox1.Text.ToLower) Then 
     MessageBox.Show(String.Format("{0} already exists", TextBox1.Text)) 
     TextBox1.Clear() 
    Else 
     myList.Add(TextBox1.Text) 
     ListBox1.Items.Add(TextBox1.Text) 
    End If 
End Sub 

После того, как вы сделали все это, ваша страница должна выглядеть как этот

Public Class Form1 
Dim myList As List(Of String) = New List(Of String) 
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    If myList.Contains(TextBox1.Text.ToLower) Then 
     MessageBox.Show(String.Format("{0} already exists", TextBox1.Text)) 
     TextBox1.Clear() 
    Else 
     myList.Add(TextBox1.Text) 
     ListBox1.Items.Add(TextBox1.Text) 
    End If 
End Sub 
End Class 
Смежные вопросы