2013-05-11 49 views
0

我試圖剝離除字母和空格中的所有字符,但我不能這樣做。我現在的代碼在下面,我怎麼改變它,所以它確實允許空格?目前,它需要文本,將其剝離,這一切都成爲一大串文字。地帶文本框中的所有字符,除了字母和空格

Dim InputTxt As String = InputText.Text 
    Dim OutputTxt As System.Text.StringBuilder = New System.Text.StringBuilder() 

    For Each Ch As Char In InputTxt 
     If (Not Char.IsLetter(Ch)) Then 
      OutputTxt.Append(Ch) 

      Continue For 
     End If 

     Dim CheckIndex As Integer = Asc("a") - (Char.IsUpper(Ch) * -32) 
     Dim Index As Integer = ((Asc(Ch) - CheckIndex) + 13) Mod 26 
     OutputTxt.Append(Chr(Index + CheckIndex)) 

    Next 
    OutputText.Text = (OutputTxt.ToString()) 
+0

查找到System.Text.RegularExpressions.Regex的功能。這將允許您使用更多的聲明性方法,而不是程序性方法。 – 2013-05-11 17:28:19

回答

3
Dim output = New StringBuilder() 

For Each ch As Char In InputTxt 
    If Char.IsLetter(ch) OrElse ch = " " Then 
     output.Append(ch) 
    End If 
Next 

OutputText.Text = output.ToString() 
+0

+1非正則表達式解決方案。 – 2013-05-11 17:33:06

+1

@MikeCole:很可能是一個更快的人。 – Neolisk 2013-05-11 17:33:34

+0

而且更易於維護。 :-) – 2013-05-11 17:39:13

0

這裏有一種使用LINQ查詢s的方法特林。

Dim candidateText = "This is a test. Does it work with 123 and !" 

    Dim q = From c In candidateText 
      Where Char.IsLetter(c) OrElse c=" " 
      Select c 

    candidateText = String.Join("", q.ToArray) 

編輯

刪除查詢的Char.IsWhiteSpace匹配OP問題。

0

我覺得graumanoz解決方案是最好的,並且不使用任何不必要的操作,比如ToList,但只是踢:

Shared Function Strip(ByVal input As String) 
    Dim output = New StringBuilder() 
    input.ToList().Where(Function(x) Char.IsLetter(x) OrElse x = " ").ToList(). 
    ForEach(Function(x) output.Append(x)) 
    Return output.ToString() 
End Function 
相關問題