3

我在 VB 中有一个字符串生成器

我喜欢检查它是否包含一个值,如果我喜欢做某事:

If strMsg.Contains("<table>") Then
  ' strMsg = strMsg + "<br/><br/><br/>"
  strMsg.Append("<br/><br/><br/>")
End If

我尝试了上述方法,但说包含不是 System.Text.StringBuilder 的成员。

我可以用什么代替包含

4

5 回答 5

4

我会检查你在StringBuilder这种情况下的输入。

Dim hasTable As Boolean = False

' Check inputs, set hasTable to True if needed

If hasTable Then
    strMsg.Append("<br/><br/><br/>")
End If
于 2012-08-06T16:24:30.597 回答
2

Contains()不在Stringbuilder 的方法中。也就是说,你有几个选择......

1.:在进入的过程中测试您的值,并为您的附加<br>标签状态维护一个布尔标志。

2.:执行ToString()并调用Contains()结果:

if strMsg.ToString().Contains("<table>") then '...

3.:实施IndexOf()和/或Contains()您自己:

Module StringBuilderExtensions

    <Extension()>
    Public Function IndexOf(ByVal sb As StringBuilder, ByVal value As String) As Integer

        For i As Integer = 0 To sb.Length - value.Length - 1

            For y As Integer = 0 To value.Length - 1

                If value(y) <> sb(i + y) Then

                    Exit For

                ElseIf y = value.Length - 1 Then

                    Return i

                End If

            Next

        Next

        Return -1

    End Function

    <Extension()>
    Public Function Contains(ByVal sb As StringBuilder, ByVal value As String) As Boolean

        Return sb.IndexOf(value) > -1

    End Function

End Module

免责声明:这还没有经过性能测试......迈克尔哈伦的评论是针对该ToString()选项的。

于 2012-08-06T16:27:41.750 回答
0

StringBuilder.ToString 给出的建议监视输入的答案是最好的选择,但是如果您需要在决赛之前 做任何需要访问的事情ToString- 在这种情况下这是替代方案 - 使用sb.ToString(0, sb.Length)所以String肯定会创建一个新的并且正在建造的可以继续(有效地)。

于 2012-08-07T11:35:14.583 回答
0
If strMsg.ToString().Contains("<table>") Then
    strMsg.Append("<br /><br /><br />")
End If
于 2012-09-12T00:44:21.413 回答
0

您可能也想研究正则表达式。它们允许您搜索大量文本并对其进行操作。这个网站有一个很棒的程序来试验它们。

也是关于它们的一个很好的教程。

于 2012-09-13T03:13:04.730 回答