2011-06-02 98 views
1

我正在寫一個字符串替換函數來取代實際圖像位置的微笑,但代碼會因爲所有嵌套的ifs而變得非常大和凌亂,但我不能想到更有效的方法編寫代碼。代碼濃縮/效率

Public Function exchangeSmilies(ByVal postString As String) As String 
    Dim ChangedString = postString 
    ChangedString.ToLower() 
    If ChangedString.Contains(":)") Then 
     ChangedString = ChangedString.Replace(":)", GetSmilieMapPath("smile.gif")) 
     If ChangedString.Contains(":p") Then 
      ChangedString = ChangedString.Replace(":p", GetSmilieMapPath("toungue.gif")) 
      If ChangedString.Contains(";)") Then 
       ChangedString = ChangedString.Replace(";)", GetSmilieMapPath("wink.gif")) 
       If ChangedString.Contains("<3") Then 
        ChangedString = ChangedString.Replace("<3", GetSmilieMapPath("heart.gif")) 
       End If 
      End If 
     End If 
    End If 
    Return ChangedString 
End Function 

Public Function GetSmilieMapPath(ByVal SmilieImage As String) As String 
    GetSmilieMapPath = "<img src=" & Chr(34) & "../Images/Smilies/" & SmilieImage & Chr(34) & ">" 
    Return GetSmilieMapPath 
End Function 
+1

你的代碼寫的沒有按」不要做你想做的事。如果一個字符串包含'<3'而不是':',你的代碼將不會做任何替換。首先取消所有這些嵌套。然後,如果它仍然看起來很混亂,請嘗試其他答案建議的字典方法。 – 2011-06-02 14:25:01

+0

在調用String.Replace之前,您不需要執行String.Contains。 – 2011-06-02 14:29:45

+0

+1,我也需要類似的解決方案 – user774411 2011-06-02 20:43:13

回答

4

使用字典來代替。

創建像在類級別以下的字典:

Dim dictionary As New Dictionary(Of String, String) 
dictionary.Add(":)", GetSmiliePath("smile.gif")) 
dictionary.Add(":p", GetSmiliePath("tongue.gif")) 
... 

在exchangeSmilies功能,可以遍歷該字典更換任何事件:

... 
For Each pair In dictionary 
    If ChangedString.Contains(pair.Key) Then 
     ChangedString = ChangedString.Replace(pair.Key, pair.Value) 
    End If 
Next 
Return ChangedString 
+1

String.Contains可以省略 - 如果pair.Key不在那裏,String.Replace將返回原始字符串。 – 2011-06-02 14:29:10

0

我還沒有做很長一段時間的vb.net所以我不能給你確切的代碼。但其基本思想是:製作一個包含符號鍵(「:)」)和文件名(「smile.gif」)值的地圖。做一個靜態成員變量。然後,只需遍歷地圖並執行if(字符串包含map.key),然後用f(map.value)替換字符串中的map.key。