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())
4

4 回答 4

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()
于 2013-05-11T17:32:31.543 回答
1

未经过全面测试,但一个简单的正则表达式应该可以替代您的所有代码

   Dim s = "ADB,12.@,,,122abC"
   Dim result = Regex.Replace(s, "[^a-zA-Z ]+", "")
   Console.WriteLine(result)

--> 输出 = ADBabC

在这里您可以找到正则表达式模式参考

于 2013-05-11T17:28:24.433 回答
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
于 2013-05-11T17:46:52.357 回答
0

这是一种使用 LINQ 查询字符串的方法。

   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 问题。

于 2013-05-11T17:43:09.937 回答