2012-08-06 62 views
3

我在VB一個StringBuilderVB的StringBuilder包含

我要檢查,看它是否包含一個值如果是我喜歡做的事:

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

我嘗試了上面只是說含有的不是System.Text.StringBuilder的成員。

我可以代替使用哪些包含

+0

又是怎樣的StringBuilder正在興建? – 2012-08-06 16:23:33

回答

2

Contains()不在Stringbuilder's methods之間。也就是說,你有幾個選項...

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()選項執導。

+0

這將工作,但對方的回答將執行好多了 – 2012-08-06 16:29:51

+0

@MichaelHaren更新。 – canon 2012-08-06 20:28:43

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 
0

給出提示監視輸入是最好的選擇,但如果你需要做任何事情,需要訪問StringBuilder.ToString最後ToString之前的答案 - 那就是在這種情況下,另一種選擇 - 使用sb.ToString(0, sb.Length)因此新String絕對是創建和一個正在建造可以繼續(有效)。

0
If strMsg.ToString().Contains("<table>") Then 
    strMsg.Append("<br /><br /><br />") 
End If 
0

你可能想看看正則表達式了。它們允許您搜索大量文本並對其進行處理。這site有一個偉大的計劃來試驗他們。

Here是對他們的一個很好的教程了。