2009-02-12 35 views
0

任何人都知道更好的方法來做到這一點?刪除大塊字符串

Dim Result1,Result2,FinalResult As String 

Result1 = Left(sXMLResponse, sXMLResponse.IndexOf("<start>")) 
Result2 = Mid(sXMLResponse, sXMLResponse.IndexOf("<end>")) 

FinalResult =Result1 & Result2 

當然有一個內置的String.Remove(StringOne,StringTwo)方法或更優雅的東西?

回答

4

你似乎在以舊的VB6方式做事。通常建議在VB.NET中使用.NET函數,即string.Substring而不是Left/Right/Mid /等。功能。現在看起來你只是試圖刪除字符串之間和之間的文本,這可以很容易地在一行中完成。

Dim result = sXMLResponse.Substring(0, sXMLResponse.IndexOf("<start>")) & sXMLResponse.Substring(sXMLResponse.IndexOf("<end>") + 5) 

真的,它與你所做的沒有什麼不同,除了它不需要臨時變量。另請注意,有一個string.Remove方法,但需要一個臨時變量來計算計數參數。

當然,您可以等價地使用RegEx在一行中刪除字符串的塊,但這對於這樣一個簡單的任務來說是沒有必要的,而且肯定會慢得多。

+0

好偉大,只是確保這個框架中沒有任何內容。以爲我錯過了某處的重載。可能使用這些解決方案的組合。謝謝 – Paul 2009-02-12 14:07:06

+0

沒有問題。如果你使用VB.NET 9.0,你可以編寫你自己的擴展方法,但是如果你在代碼中定期做這些事情,那麼你只能這麼做。 – Noldorin 2009-02-12 17:11:31

0

首先,我認爲Remove()會從另一個字符串中刪除一個字符串,這並不是您想要的。

您希望能夠提取以一個字符串開頭並以另一個字符串結尾的字符串。在這種情況下,爲什麼不寫你自己的?喜歡的東西:

function extractStr (str as string, startStr as string, endStr as string) as string 
    dim sPos as integer 
    dim ePos as integer 

    sPos = instr (str,startStr); 
    ePos = instr (str,endStr); 

    extractStr = str 
    if ePos > 0 then 
     extractStr = left (extractStr, ePos + len(endStr)) 
    end if 
    if sPos > 0 then 
     extractStr = mid (extractStr, sPos) 
    end if 
end 
+0

糾正我,如果我錯了,但我相信OP是使用VB.NET(雖然在VB6風格)。儘管你的代碼可以在VB.NET中編譯和工作(自從我編寫VB6以來已經很長時間了),但它並不是推薦的任務執行方式。 – Noldorin 2009-02-12 13:27:31

2

你可以試試這個解決方案:

Dim stringOne as String="ae234-asd-dddddffdfdff"; 
Dim stringTwo as String="-asd-"; 

stringOne.Replace(stringTwo, String.Empty); 

但如果在stringOne超過一個stringTwo,他們也是在此溶液中取出