2016-08-17 7 views
2

シンプルな質問の可能性がある単純なコーダー。VB.Netで特定の文字列を検索する

テキストボックス(txtMsg)があります。テキストボックス(txtMsg)には何かを入力すると、リストボックス(lstMsg)にテキストが表示されます(btnSubmit)。

ユーザーが[送信]ボタンをコードの別の部分として押すと、特定の単語(「はい」)が入力されているかどうかを確認したいと思います。

問題は「はい」はテキストボックス内の任意の場所にある可能性があり、ユーザーは自由に任意の語句を書くことができます。

私の元のコードは、それは(つまり、ユーザがその前後のスペースは含まれません)書かれた唯一のものである場合や、

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

残念ながら、上記のコードはイエスをキャプチャしていないそれが最後の言葉は終わりである場合(すなわち、「はい」の後にスペースを持たない)。

「はい」(スペースなし)で検索すると、「昨日」などの単語のコードに従って正常な結果が得られますが、これはユーザーにとっては受け入れられません。

ヒント?

+0

ようになるはずです正規表現の使い方を知っていますか? –

+1

私はあなた自身のことを自分自身で教えているので、確かにあなたより低い理解しか持っていません:) – HughJanus

+0

Regex.IsMatch(txtMsg、 "\ byes \ b")Then ... 'の場合はどうですか? '\ b'部分は単語境界にマッチしますので、単語" yes "は一致しますが、" yesterday "などは一致しません。 – Mark

答えて

0

「はい」を探しているわけではないので、containsメソッドで検索しないでください。あなたは "はい"を探しています。

代わりにtxtMsg.toLower.contains( "yes")を使用すると、ifステートメントは "yes"の前後に関係なく実行されます。また、大文字小文字を無視します(「はい」に大文字が含まれる場合)。

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

「はい」が見​​つかったかどうかに基づいて、2つのイベントが発生します。 yesが見つかった場合は、イベント1を実行します。 - yesが見つからない場合は、イベント2を実行します。その場合、if文も必要ですか? 最後に指摘してくれてありがとうございますが、txtmsgの内容は、この記事では言及していない私の解決策の以前のコーディングから既に小文字にされていますが、そのことを認めて助けてくれてありがとうございます:) – HughJanus

+0

else文、 if-testがfalseを返すと、ifステートメントのコードの代わりにelseステートメントのコードが実行されます。私は自分のコードに編集を投稿しました。 – Luke

+0

ありがとうルーク。 私はこれを試しましたが、ここでの問題は、 "Yesterday"というフレーズ(例として)にIFが成功するということです。単語に "yes"が存在するためです。この特定の要素には、私を最も困惑させているものがあります。助言がありますか? – HughJanus

0

あなたの質問とコメントからわかるように、リストボックスを使用して値を検索し、「はい」や「昨日」と衝突する代わりに、配列を使用します。
これが言われているので、これを試してみてください。すべての

まず、あなたはどこからあなたが作業しているから、あなたの現在のフォームを命名しているものは何でもForm1かでこのアレイにアクセスできるようになります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 

(私はButton1を使用)、それはコマンドを実行するあなたのボタンにこれを追加し、あなたのページがあなたを行い、この

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 
関連する問題