2011-06-01 79 views
0

我有一个程序扫描槽textbox1文本,并显示textbox1所有单词textbox2长度超过n个字母。下面是完整的代码:文本分割问题

Private Function filterWords(ByVal minLenght As Short, ByVal input As String) As List(Of String) 
     Dim strInput() As String = input.Split(" ") 
     Dim strList As New List(Of String) 
     strList = strInput.ToList() 

     For Each word In strInput 
      If word.Length < minLenght Then 
       strList.Remove(word) 
      End If 
     Next 
     Return strList 
    End Function 

    Private Sub textbox1_TextChanged(ByVal sender As Object, ByVal e As System.Windows.Controls.TextChangedEventArgs) Handles textbox1.TextChanged 
     textbox2.Text = "" 
     Dim strOut As New List(Of String) 

     strOut = filterWords(4, textbox1.Text) 

     For Each w In strOut 
      textbox2.Text += w & " " 
     Next 
    End Sub 

比如你键入ABCD那么它不会出现在TextBox2中任何东西,但如果你键入一个然后按回车键,然后b,它会显示两个他们。我应该写什么来避免这种情况?

+0

不能完全确定我跟着,如果键入ABCD那么什么都不会在TextBox2中显示,因为所有的话都达不到规定长度是4?除非b c d是可能长度大于4的样本单词,那么我看不到任何错误? – 2011-06-01 12:00:11

+0

您是否希望在用户输入完成后才会发生这种情况?即按下输入 – 2011-06-01 12:00:28

回答

2

这真的取决于你如何定义一个词。你目前的实施定义了一个空间可以捐赠一个词的结尾。您只通过将空格传递给input.Split来定义此项。如果您还想定义句点(。)结尾的单词,请添加它:input.Split(" .")
如果您想要在新行上标注单词,请添加它:input.Split(" ." & Environment.NewLine.ToString())

另一种方法是使用正则表达式,也许像这样:

Private Function filterWords(ByVal minLength As Short, ByVal input As String) _ 
    As List(Of String) 

    Dim strList As New List(Of String) 
    Dim wordMatches = Regex.Matches(input, "\w+").Cast(Of Match) 
    For Each wordMatch In wordMatches 
     If wordMatch.Value.Length >= minLength Then 
      strList.Add(wordMatch.Value) 
     End If 
    Next 
    Return strList 

End Function 
+0

如何获得正则表达式?我应该输入什么? – Cobold 2011-06-01 12:06:32

+0

'导入System.Text.RegularExpressions' – 2011-06-01 12:12:03